0

私は得ています

  List<Map<String,Object>> listMap = [
    {employee=17, fromdate=2010-08-01 00:00:00.0, full_inc=25572.0000},
    {employee=17, fromdate=2010-09-01 00:00:00.0, full_inc=28347.0000},  
    {employee=17, fromdate=2010-10-01 00:00:00.0, full_inc=37471.0000},
    {employee=17, fromdate=2011-02-01 00:00:00.0, full_inc=47033.0000},
    {employee=17, fromdate=2011-07-01 00:00:00.0, full_inc=50592.0000}
  ]

誰かが私を助けてくれますか?javaでfull_incに基づいてこのマップのリストを高額から低額に並べ替える方法

4

5 に答える 5

4

以下に示すJava8で使用できます。

listMap.sort(Comparator.comparing(m->(double) m.get("full_inc"),Comparator.nullsLast(Comparator.reverseOrder())));
于 2019-08-22T11:24:40.570 に答える
3

Objectカスタムコンパレータを使用できますが、を実装するには(現在)値が必要ですComparable。リストの現在の宣言に基づいて、それを行うことはできません(2つのランダムなオブジェクトをどのように比較しますか?):

List<Map<String,Comparable>> listMap = ...
Collections.sort(listMap, new Comparator<Map<String, Comparable>> () {

    @Override
    public int compare(Map<String, Comparable> m1, Map<String, Comparable> m2) {
        return m2.get("full_inc").compareTo(m1.get("full_inc")); //descending
    }
});

注:エラーチェックを追加する必要があります。

于 2012-08-09T09:20:30.973 に答える
1

私は...するだろう

  • マップをカスタムクラスのオブジェクトにします。
  • カスタムクラスにComparableを実装させる
  • Collections.sort()を使用する
于 2012-08-09T09:20:52.497 に答える
1

解決策1は、並べ替えるすべてのエントリをTreeMap<K,V>TreeMap doc)に配置することです。ここで、Kは並べ替えの基準(ここではfull_inc)であり、Vは並べ替える基準です。次に、TreeMap.entrySetは、のcompare()の順序に従って繰り返されますK

解決策2は、full_incを使用して独自のComparableクラスを作成し、同じクラスのオブジェクトと比較して、Collections.sortを使用することです。

解決策3は2とほぼ同じですが、Collections.sortとコンパレータを使用して、カスタムクラスの2つのインスタンスを比較します。getFullInc()

于 2012-08-09T09:24:03.023 に答える
0

独自のコンパレータでCollections.sort()を使用できます。

于 2012-08-09T09:19:48.800 に答える