我的数组列表值如下
[
{
Distance=Distance: 16.6km,
branch_desc=name 1,
},
{
Distance=Distance: 5.4km,
branch_desc=name 2,
},
{
Distance=Distance: 13.4km,
branch_desc=name 3,
}
]
如何将数组列表排序为升序和降序与距离比较。我不知道如何对数组列表进行排序。有人知道请帮我解决这个问题。
见Collections#sort(List<T> list)
。T
它可以帮助您对实现Comparable的任何列表进行排序。
如果你的类没有实现 Comparable,你可以提供一个 Comparator 并调用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
或者您可以提供一个比较器来根据任何标准对项目进行排序:
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();
}
});
试试这个代码
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);
}
});
我建议您创建一个专用的Comparator
类扩展。您可以创建一个类并使用布尔值来指定这是升序还是降序,或者为每个订单创建一个类。
差异将存在于您的compare(T, T)实现中,因为这是您实际将对象与您选择的标准进行比较的地方,在您的情况下是 field 的值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 个案例
AscendingComparator comp1 ...
DescendingComparator comp2 ...
Collections.sort(list, comp1); // Sort ascending
Collections.sort(list, comp2); // Sort descending