我有一个List<String>
和一个List<Integer>
,它们都按照特定顺序排列(它们是相互关联的)。List<String>
包含名称,List<Integer>
包含它们对应的值。
有没有一种方法可以按大小排序List<Integer>
,同时改变List<String>
的排序方式,使得名称和值仍然保持关联?
java.util.TreeMap<Integer,String>
。该Map会根据其键的自然顺序或在创建Map时提供的Comparator
进行排序,具体取决于所使用的构造函数。List<NameAndValue>
代替两个列表(并找到一个更好的名称来反映这些数据实际代表的含义)。Java 是一种面向对象的语言。使用对象是为了包含相关的数据,并通过方法和封装提供行为。- 你可以使用 java.util.TreeMap<Integer, String>
,它实现了 SortedMap
接口,按照键的自然顺序排序。
- 你也可以使用 java.util.Comparator<T>
进行排序。
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 }
});
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);