Java 8 ストリーム ソート LIst とカスタム オブジェクト コンパレータを使用します
主な比較は時間ですが、時間は最新の時間です。Java での比較 The ACSIIメソッド比較のコードなので、2020 と 2021 は先頭に 0 でなければなりませんが、必要なのは先頭に最新の日付があるため、返された結果を反転します。通常、オブジェクト 1 の編集時刻はオブジェクト 2 の時刻と比較されます。オブジェクト 1 の時間がオブジェクト 2 の時間より小さい場合、1 が返されます。したがって、2020 が前であることがわかります。compareto の結果は 3 つしかないため、反転するだけで済みます。1 つは 1 です。昇順、降順で -1、および 0 が等しいことを意味します (String クラスは Comparable インターフェイスを実装します。
CompareTo メソッドは、等しい場合は 0、昇順の場合は 1、降順の場合は -1 を返します)。なぜここで反転しているかわかりますか?
反転後は、2021-09-06 が前になる可能性があるためです。最新の時刻で並べ替えることができます。
如果有的java 8 stream 不懂的可以去看看哦 List<Map<String,Object>> resultList = null; Map<String,Object> ss1 = new HashMap<>(); ss1.put("dictcode","2"); ss1.put("DictValue","霓虹灯广告1"); ss1.put("EditTime","2021-09-16 17:47:30"); Map<String,Object> ss2 = new HashMap<>(); ss2.put("dictcode","1"); ss2.put("DictValue","霓虹灯广告2"); ss2.put("EditTime","2020-04-16 17:47:30"); Map<String,Object> ss3 = new HashMap<>(); ss3.put("dictcode","21"); ss3.put("DictValue","霓虹灯广告3"); ss3.put("EditTime","2020-09-13 17:47:30"); Map<String,Object> ss4 = new HashMap<>(); ss4.put("dictcode","3"); ss4.put("DictValue","霓虹灯广告4"); ss4.put("EditTime","2020-09-16 17:47:30"); Map<String,Object> ss5 = new HashMap<>(); ss5.put("dictcode","4"); ss5.put("DictValue","霓虹灯广告5"); ss5.put("EditTime","2020-09-16 17:47:30"); List<Map<String, Object>> maps = Arrays.asList(ss1, ss2, ss3, ss5, ss4); //默认按edittime排序,如果时间相同或者为空,则按照code排序 maps.stream().sorted((o1, o2) -> { if (StringUtils.isEmpty(o1.get("EditTime").toString()) || StringUtils.isEmpty(o2.get("EditTime").toString())) { return o1.get("dictcode").toString().compareTo(o2.get("dictcode").toString()); } else if (o1.get("EditTime").equals(o2.get("EditTime"))) { return o1.get("dictcode").toString().compareTo(o2.get("dictcode").toString()); } else if (o1.get("EditTime").toString().compareTo(o2.get("EditTime").toString()) > 0) return -1; else return 1; /*if (StringUtils.isEmpty(o1.get("EditTime").toString())||StringUtils.isEmpty(o2.get("EditTime").toString()) || o1.get("EditTime").equals(o2.get("EditTime"))) { return o1.get("dictcode").toString().compareTo(o2.get("dictcode").toString()); } else { if (o1.get("EditTime").toString().compareTo(o2.get("EditTime").toString()) >0) return -1; return 1; }*/ }).collect(Collectors.toList()).forEach(System.out::println);
データを処理するとき、多くの場合、データをソートしてからフロントエンド呼び出しに返す必要があります。たとえば、時間の昇順にソートすると、フロントエンド表示データは時間順にソートされます。
ここでは、カスタマイズされた並べ替えを実行するためにストリームのsorted()メソッドを使用できます
ここでのサンプルデータはリストコレクション、List コードは次のとおりです: 注: ここでのコンパレータのパラメータは、カプセル化されたラムダ式 new Integer(o.getMonth()) を使用します。 Integer 型に変換するのは、設計した Data エンティティ クラスの month 属性が Integer 型ではなく String 型であるためです。Integer 型への変換は、次の月のトラバース判定のためです。属性が Integer Month の場合、クラスのメソッド参照は次のようになります。コンパレータで直接定義されます。 は次のとおりです: 以上がJava 8 でストリームとカスタム コンパレータを使用して並べ替える方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。list.stream().sorted(Comparator.comparing(o->new Integer(o.getMonth()))).collect(Collectors.toList());
list.stream().sorted(Comparator.comparing(Data::getMonth).collect(Collectors.toList());