Gunakan SENARAI pengisihan aliran java 8 dan pembanding objek tersuai
Perbandingan utama ialah masa, tetapi masa adalah masa terkini, bandingkan dengan dalam java The ACSII kod perbandingan kaedah, jadi 2020 dan 2021 mesti 0 di hadapan, tetapi yang kita perlukan adalah tarikh terkini di hadapan, jadi kita terbalikkan hasil yang dikembalikan Biasanya, masa edit objek 1 dibandingkan dengan masa objek 2. Jika masa objek 1 adalah kurang daripada masa objek 2, 1 akan dikembalikan Jadi kita akan mendapati bahawa 2020 adalah di hadapan , -1 dalam tertib menurun dan 0 adalah sama dengan (Kelas String melaksanakan antara muka Sebanding.
Kaedah CompareTo mengembalikan 0 untuk kesamaan, 1 untuk tertib menaik dan -1 untuk tertib menurun mengapa penyongsangan diterbalikkan di sini?
Sebab selepas penyongsangan, 2021-09-06 boleh berada di hadapan. Anda boleh mengisih mengikut masa terkini.
如果有的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);
Apabila memproses data, kita selalunya perlu mengisih dan kemudian kembali ke panggilan bahagian hadapan Contohnya, mengisih dalam urutan masa menaik, bahagian hadapan data paparan diisih mengikut masa .
Di sini anda boleh menggunakan kaedah strim sorted() untuk melaksanakan pengisihan tersuai
Data contoh di sini ialah koleksi senarai, List Kod adalah seperti berikut: Nota: Parameter dalam pembanding di sini menggunakan ungkapan Lambda, Integer baharu(o.getMonth()), yang dikapsulkan ke dalam Integer Jenisnya adalah kerana atribut bulan dalam kelas entiti Data yang kami reka adalah daripada jenis String, bukan Integer Penukaran kepada Integer adalah untuk penghakiman traversal bulan berikutnya Jika atribut adalah Bulan Integer, rujukan kaedah kelas tersebut ditakrifkan secara langsung dalam pembanding Atas ialah kandungan terperinci Apakah cara untuk mengisih menggunakan aliran dan pembanding tersuai dalam Java 8?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!list.stream().sorted(Comparator.comparing(o->new Integer(o.getMonth()))).collect(Collectors.toList());