2

我的数组列表值如下

[
{
    Distance=Distance: 16.6km,
    branch_desc=name 1,
},
{
    Distance=Distance: 5.4km,
    branch_desc=name 2,
},
{
    Distance=Distance: 13.4km,
    branch_desc=name 3,
}
]

如何将数组列表排序为升序和降序与距离比较。我不知道如何对数组列表进行排序。有人知道请帮我解决这个问题。

4

3 回答 3

12

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();
  }
});
于 2013-09-06T12:37:33.537 回答
3

试试这个代码

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);
        }
    });
于 2013-09-06T12:37:24.343 回答
1

我建议您创建一个专用的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
于 2013-09-06T12:59:51.217 回答