我有一个List<String>
和一个List<Integer>
。两者都有特定的顺序(它们是链接的)。List<String>
包含名称List<Integer>
及其值。
有没有办法List<Integer>
按大小排序,但也可以更改排序,List<String>
以便值和名称保持链接?
你需要java.util.TreeMap<Integer,String>
. 这根据其键的自然顺序或Comparator
在地图创建时提供的排序,具体取决于constructor
所使用的。
您应该使用 aList<NameAndValue>
而不是两个列表(并找到比NameAndValue更好的名称,这将反映这些数据实际代表的内容)。Java 是一种面向对象的语言。使用对象。这就是它们的用途:包含相关的数据,并通过方法和封装提供行为。
一旦你有了这个类,你就可以按名称、值或两者对列表进行排序,如果需要,添加一个额外的字段不会有问题。
-您可以使用java.util.TreeMap<Integer, String>
which 实现SortedMap
. 它按 key 的自然顺序排序。
-你也可以用java.util.Comparator<T>
它来整理它。
从干净的代码的角度来看,如果它们属于一起,并且这个结构可以在其他地方重用,你应该用它们创建一个类,并让它实现 Comparable :
public SomeClass implements Comparable<SomeClass> {
private Integer id;
private String name;
private Whatever elseIsNeededHere;
/* getters'n'setters*/
// ******** THOU SHALT NEVER FORGET THY FRIENDS, EQUALS AND HASHCODE, OR ELSE THEY TURN TO BE THY FOES ********
@Override
public boolean equals(Object other) { //do what it takes }
@Override
public int hashCode() { //do what it takes! }
/* actually implement Comparable */
@Override
public int compareTo(SomeClass o) {
//null check, and other bloat left out for sake of brevity
return this.id.compareTo(o.getId());
}
}
然后你可以有一个包含属于一起的列表,并对其进行非常好的排序:
ArrayList<SomeClass> myList = getMyData();
Collections.sort(myList);
并且myList
列表实例按照您想要的方式排序。
如果您想要不同的比较方法,您可以使用其他方式,即使用Comparators:
Collections.sort(myList,new Comparator<SomeClass>() {
public int compare(SomeClass a, SomeClass b) { // do what it takes }
});
你可以试试这个:
创建一个自定义 Comprator 类,如:
import java.util.Comparator;
/**
* Created by Maddy Sharma on 7/17/2015.
* Contains sorting logic to sort Dialogs by its date(long)
*/
public class DateDialogComparator implements Comparator<UserChatDialog>{
// lhs.getLastMessageDateSent() is the long value
@Override
public int compare(UserChatDialog lhs, UserChatDialog rhs) {
// This line will work in java 7 and Android API Level 19
// return Long.compare(lhs.getLastMessageDateSent(), rhs.getLastMessageDateSent());
'OR'
if(lhs.getLastMessageDateSent()>rhs.getLastMessageDateSent())
return -1;
else if(lhs.getLastMessageDateSent()<rhs.getLastMessageDateSent())
return +1;
return 0;
}
}
从活动或片段中调用它,例如:
ArrayList<UserChatDialog> myList = userChatDialogList;
Collections.sort(myList, new DateDialogComparator());
Log.i("List after sorting is:", "" + userChatDialogList);