Heim  >  Artikel  >  Java  >  Wie kann in Java 8 mithilfe von Streams und benutzerdefinierten Komparatoren sortiert werden?

Wie kann in Java 8 mithilfe von Streams und benutzerdefinierten Komparatoren sortiert werden?

王林
王林nach vorne
2023-05-07 21:46:061569Durchsuche

Java8-Stream-Sortierung und benutzerdefinierter Komparator

Verwenden Sie die Java 8-Stream-Sortierliste und den benutzerdefinierten Objektkomparator

Der Hauptvergleich ist die Zeit, aber die Zeit ist die aktuellste Zeit , der ACSII-Code, der von der Compareto-Methode in Java verglichen wird, also müssen 2020 und 2021 vorne 0 sein, aber was wir brauchen, ist das späteste Datum vorne, also invertieren wir das zurückgegebene Ergebnis. Normalerweise sind die Bearbeitungszeit und das Objekt von Objekt 1 Der Zeitvergleich von 2 bedeutet, dass 1 zurückgegeben wird, wenn die Zeit von Objekt 1 kleiner ist als die von Objekt 2. Wir müssen also nur 2020 umkehren, da es nur drei Vergleichsergebnisse gibt , eins ist 1 in aufsteigender Reihenfolge, -1 in absteigender Reihenfolge, 0 bedeutet gleich (String-Klasse implementiert die Comparable-Schnittstelle.

CompareTo-Methode gibt 0 für Gleichheit, 1 für aufsteigende Reihenfolge und -1 für absteigende Reihenfolge zurück ). Können Sie verstehen, warum hier die Invertierung durchgeführt wird?

Denn nach der Wende kann der 06.09.2021 vorne liegen. Sie können nach der letzten Zeit sortieren.

如果有的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);

Java-Stream-Sortierproblem

Wenn wir Daten verarbeiten, müssen wir sie oft sortieren und dann an den Front-End-Aufruf zurückgeben, zum Beispiel in aufsteigender Reihenfolge nach Zeit, das Frontend zeigt die Daten nach Sortierung nach Zeit an.

Hier können Sie die sorted()-Methode des Streams verwenden, um eine benutzerdefinierte Sortierung durchzuführen

Lassen Sie uns über die Verwendung sprechen

Die Beispieldaten hier sind a Listensammlung. Listb698f00c7a5e368bd282ff25ef940af4list, es gibt viele Attribute in der Datenentitätsklasse, einschließlich Zeitfeld und Monat, wenn wir die Methode stream().sorted() verwenden, da die Elemente vom Klassenreferenztyp sind um einen Komparator anzupassen, sortiert in aufsteigender Reihenfolge nach Monat.

Der Code lautet wie folgt:

list.stream().sorted(Comparator.comparing(o->new Integer(o.getMonth()))).collect(Collectors.toList());

Hinweis:

Die Parameter im Komparator verwenden hier den Lambda-Ausdruck, new Integer(o.getMonth( )) Diese Art der Kapselung in den Integer-Typ ist darauf zurückzuführen, dass das Monatsattribut in der von uns entworfenen Datenentitätsklasse vom Typ String und nicht vom Typ Integer ist. Die Konvertierung in Integer erfolgt für die nachfolgende Monatsdurchlaufbeurteilung. Wenn das Attribut Integer Month ist, ist dies möglich im Komparator verwendet werden Die Methodenreferenz zum direkten Definieren der Klasse

lautet wie folgt:

list.stream().sorted(Comparator.comparing(Data::getMonth).collect(Collectors.toList());

Das obige ist der detaillierte Inhalt vonWie kann in Java 8 mithilfe von Streams und benutzerdefinierten Komparatoren sortiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen