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)ComparableTを実装するリストをソートするのに役立ちます。

クラスが 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

または、 Comparator を提供して、任意の基準でアイテムを並べ替えることができます。

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のクラス拡張機能を作成することをお勧めします。単一のクラスを作成し、ブーリアンを使用して昇順または降順のどちらにするかを指定するか、順序ごとに 1 つのクラスを作成するかを指定できます。

違いは、compare(T, T)の実装にあります。これは、選択した基準でオブジェクトを実際に比較する場所であるためです。これは、あなたの場合は field の値ですDistance次にCollections.sort(ArrayList, Comparator)を呼び出して、ArrayList.

1 つのクラスを使用する

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 に答える