我有List<String>
和List<Integer>
。两者都按特定顺序(它们是相互关联的)。 List<String>
包含名称和List<Integer>
其值。
有没有办法按大小排序List<Integer>
,还可以更改List<String>
的排序,以便值和名称保持关联?
答案 0 :(得分:15)
您需要java.util.TreeMap<Integer,String>
。这是根据其键的自然顺序或在地图创建时提供的Comparator
进行排序,具体取决于使用的constructor
。
答案 1 :(得分:14)
您应该使用List<NameAndValue>
而不是两个列表(找到比 NameAndValue 更好的名称,这将反映这些数据实际代表的内容)。 Java是一种OO语言。使用对象。这就是他们的目的:包含相关的数据,并提供方法和封装的行为。
有了这个课程,您就可以按名称,价值或两者对列表进行排序,如果需要,添加额外的字段也不会有问题。
答案 2 :(得分:2)
- 您可以使用java.util.TreeMap<Integer, String>
来实现SortedMap
。它按密钥的自然排序排序。
- 您还可以使用java.util.Comparator<T>
对其进行排序。
答案 3 :(得分:1)
从干净代码的角度来看,如果这些属于一起,并且此结构可以在其他地方重复使用,那么您应该创建一个类他们,并使其实现可比较:
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 }
});
答案 4 :(得分:0)
你可以试试这个:
创建一个自定义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);