Java: Verwenden Sie Stream, um den Inhalt einer Sammlung zu sortieren

Einführung

Jetzt möchten Sie eine Sammlung von Koordinatenklassen (x, y) sortieren. Als ich nach einer einfachen Möglichkeit suchte, schien es, dass Stream verwendet werden könnte, also versuchte ich es.

Es war in Ordnung, bis ich es auf die Konsole legte, aber als ich es nach dem Sortieren in eine Sammlung konvertierte, blieb ich stecken, sodass ich es als Memo belassen werde.

Implementierung

Erstellen Sie zunächst eine Koordinatenklasse.

Point.java


public class Point{
    int x;
    int y;            

    Point(int x, int y){
        this.x = x;
        this.y = y;
    } 
        
    //getter
    public int getX(){return x;}
    public int getY(){return y;}
}

Verwenden Sie dann Stream, um die Sammlung von Koordinatenklassen zu sortieren. Der Inhalt der Sortierung wird nach der Methode "sortiert" beschrieben und intern mit der Klasse "Comparator" verglichen. Ich benutze die "thenComparing" -Methode, um eine Art y nach x auszuführen.

.collect(Collectors.toCollection(ArrayList::new) Schließlich habe ich es in eine Sammlung umgewandelt, aber ich war hier wirklich begeistert. Ich dachte, ich könnte einfach "toArrayList" verwenden.

Main.java


import java.util.ArrayList;
import java.util.Comparator;
import java.util.stream.Stream;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args ) throws Exception {
        ArrayList<Point> node = new ArrayList<Point>();
        
        //Fügen Sie der Liste Koordinaten hinzu
        node.add(new Point(4,3));
        node.add(new Point(2,2));
        node.add(new Point(1,3));
        node.add(new Point(1,1));
        node.add(new Point(2,4));
        node.add(new Point(2,1));
        node.add(new Point(5,3));

        //Vor dem Sortieren
        System.out.println("===Before Sort===");
        node.stream().forEach(nodes -> 
            System.out.println("node X:"+nodes.getX()+" Y:"+nodes.getY()));

        //X:Aufsteigende Reihenfolge, Y.:In aufsteigender Reihenfolge sortieren und in ArrayList speichern
        ArrayList<Point> nodeSort = node.stream()
            .sorted(Comparator.comparingInt(Point::getX)   
            .thenComparing(Comparator.comparingInt(Point::getY)))
            .collect(Collectors.toCollection(ArrayList::new));
        
        //Nach dem Sortieren
        System.out.println("===After Sort===");
        nodeSort.stream().forEach(nodes -> 
            System.out.println("node X:"+nodes.getX()+" Y:"+nodes.getY()));
    }
}

Ausführungsergebnis

===Before Sort===
node X:4 Y:3
node X:2 Y:2
node X:1 Y:3
node X:1 Y:1
node X:2 Y:4
node X:2 Y:1
node X:5 Y:3
===After Sort===
node X:1 Y:1
node X:1 Y:3
node X:2 Y:1
node X:2 Y:2
node X:2 Y:4
node X:4 Y:3
node X:5 Y:3

Zusammenfassung

Dieses Mal habe ich Ihnen gezeigt, wie Sie eine Sammlung von Klassen mit Stream sortieren. Außerdem scheint es, dass Sie auch Bedingungen extrahieren können, so dass es sehr praktisch ist, wenn Sie Stream beherrschen können.

Recommended Posts

Java: Verwenden Sie Stream, um den Inhalt einer Sammlung zu sortieren
Verwenden Sie Java-Lambda-Ausdrücke außerhalb der Stream-API
[java8] Um die Stream-API zu verstehen
Anmerkung: [Java] Überprüfen Sie den Inhalt des Verzeichnisses
[Java] Verwendung der toString () -Methode
Studieren der Verwendung des Konstruktors (Java)
[Verarbeitung × Java] Verwendung der Schleife
[Java] [Maven3] Zusammenfassung der Verwendung von Maven3
[Verarbeitung × Java] Verwendung der Klasse
So sortieren Sie eine Liste von SelectItems
Ausgabe des Buches "Einführung in Java"
[Verarbeitung × Java] Verwendung der Funktion
[Java] Verwendung der Calendar-Klasse
So überprüfen Sie den Inhalt der Java-Zeichenfolge mit fester Länge
[Java] Inhalt der Collection-Schnittstelle und der List-Schnittstelle
Verwenden Sie jenv, um mehrere Java-Versionen zu aktivieren
JAVA: jar, aar, zeige den Inhalt der Datei an
Ich möchte den Inhalt der Absicht var_dump
Ausgabe der Verwendung der Slice-Methode
Verwendung der replace () -Methode (Java Silver)
Java Willkommen im Sumpf der zweidimensionalen Arrays
Abgelaufene Java-Sammlung
[Java] So erhalten Sie mithilfe von Stream auf einfache Weise die längste Zeichenfolge von ArrayList
Wie schreibe ich Scala aus der Perspektive von Java
[Java] So erhalten Sie den Maximalwert von HashMap
Zusammenfassung der Java-Kommunikations-API (1) Verwendung von Socket
Zusammenfassung der Java-Kommunikations-API (3) Verwendung von SocketChannel
Zusammenfassung der Java-Kommunikations-API (2) Verwendung von HttpUrlConnection
[Rails] So erhalten Sie den Inhalt starker Parameter
Zusammenfassung der Verwendung des im IE festgelegten Proxy-Sets bei der Verbindung mit Java
[Java] Verwendung von Map
[Java11] Stream-Zusammenfassung - Vorteile von Stream -
Verwendung der Java-Klasse
[Java] Komparator der Collection-Klasse
[Java] Verwendung von removeAll ()
Verwendung von Java Map
[Java] Gründe für die Verwendung von statischen
Verwendung von Java-Variablen
[Java] Einführung in die Stream-API
Eingabe in die Java-Konsole
Verwendung des mit Tensorflow 2.0 trainierten Modells mit Kotlin / Java
[Ein Muss für einen Java-Ingenieurlehrling] Verwendung der Stream-API
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Kommen Sie zu den Abkürzungen aus den fünf Beispielen für kursive Java-Listen
20190803_Java & k8s on Azure Die Geschichte vom Festivalbesuch
Befehl zum Überprüfen der Anzahl und des Status von Java-Threads
[Java] Um die Typinformationen der Typparameter zur Laufzeit zu kennen
[Ruby] So rufen Sie den Inhalt des Doppel-Hash ab
Java: Das Problem ist schneller, Stream oder Loop
So leiten Sie den letzten Tag des Monats in Java ab
So ändern Sie den Inhalt der JAR-Datei, ohne sie zu dekomprimieren
[Java] Verwenden Sie ResolverStyle.LENIENT, um Datum und Uhrzeit gut zu handhaben