我的数组列表值如下所示
[
{
Distance=Distance: 16.6km,
branch_desc=name 1,
},
{
Distance=Distance: 5.4km,
branch_desc=name 2,
},
{
Distance=Distance: 13.4km,
branch_desc=name 3,
}
]
如何对数组列表进行升序和降序排序与距离进行比较。我不知道如何对数组列表进行排序。任何人都知道请帮我解决这个问题。
答案 0 :(得分:10)
见Collections#sort(List<T> list)
。它可以帮助您对实现Comparable的任何T
列表进行排序。
如果您的班级没有实施Comparable,您可以提供比较器并致电static void <T> sort(List<T> list, Comparator<? super T> c)
。
小班的例子:
public class Item implements Comparable<Item>{
private Integer number;
private Double distance;
//Getters & Setters
...
@Override
public int compareTo(Item o) {
return this.distance > o.distance? -1 : 1;
}
}
当它实现Comparable时,您可以对这样的列表进行排序:
List<Item> myItemList = ... ;
Collections.sort(myItemList);
//Now, myItemList is sorted
OR 您可以提供比较器来按任何条件对项目进行排序:
List<Item> list = ...;
//Here, I provide a Comparator to sort Items by number.
Collections.sort(list, new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
return o2.getNumber() - o1.getNumber();
}
});
答案 1 :(得分:1)
试用此代码
List<List<Integer>> list = Arrays.asList(Arrays.asList(10, 5, 4),
Arrays.asList(1, 2, 3), Arrays.asList(5, 6, 7));
for (List<Integer> l : list) {
Collections.sort(l);
}
Collections.sort(list, new Comparator<List<Integer>>() {
public int compare(List<Integer> o1, List<Integer> o2) {
return o1.get(0).compareTo(o2.get(0));
}
});
System.out.println(list);
字符串排序
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareToIgnoreCase(s2);
}
});
答案 2 :(得分:1)
我建议您创建一个专用的Comparator
类扩展。
您可以创建一个单独的类并使用布尔值来指定它是按升序还是降序排列,或者为每个订单创建一个类。
差异将存在于compare(T, T)的实现中,因为这是您实际将对象与您选择的条件进行比较的地方,在您的情况下是字段Distance
的值。
然后,您拨打Collections.sort(ArrayList, Comparator)对ArrayList
进行排序。
使用一个单一类
MyComparator comp = ... // You can even pass the boolean at instanciation
comp.setAscending(true); // 'false' for descending
Collections.sort(list, comp); // Sort is performed - order depends on boolean
使用2 casses
AscendingComparator comp1 ...
DescendingComparator comp2 ...
Collections.sort(list, comp1); // Sort ascending
Collections.sort(list, comp2); // Sort descending