Java: utilisez Stream pour trier le contenu d'une collection

introduction

Vous souhaitez maintenant trier une collection de classes de coordonnées (x, y). Lorsque je cherchais un moyen simple de le faire, il semblait que Stream pouvait être utilisé, alors j'ai essayé de l'utiliser.

C'était bien jusqu'à ce que je le mette sur la console, mais quand je l'ai converti en collection après le tri, je suis resté bloqué, donc je vais le laisser comme mémo.

la mise en oeuvre

Commencez par créer une classe de coordonnées.

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;}
}

Utilisez ensuite Stream pour trier la collection de classes de coordonnées. Le contenu du tri est décrit par la méthode «sorted» et comparé en interne à l'aide de la classe «Comparator». J'utilise la méthode thenComparing pour effectuer une sorte de y suivant x.

.collect(Collectors.toCollection(ArrayList::new) Finalement, je l'ai converti en collection, mais j'étais vraiment dedans ici. J'ai pensé que je pourrais simplement utiliser toArrayList.

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>();
        
        //Ajouter des coordonnées à la liste
        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));

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

        //X:Ordre croissant, Y:Trier par ordre croissant et stocker dans ArrayList
        ArrayList<Point> nodeSort = node.stream()
            .sorted(Comparator.comparingInt(Point::getX)   
            .thenComparing(Comparator.comparingInt(Point::getY)))
            .collect(Collectors.toCollection(ArrayList::new));
        
        //Après le tri
        System.out.println("===After Sort===");
        nodeSort.stream().forEach(nodes -> 
            System.out.println("node X:"+nodes.getX()+" Y:"+nodes.getY()));
    }
}

Résultat d'exécution

===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

Résumé

Cette fois, j'ai décrit comment trier une collection de classes à l'aide de Stream. En outre, il semble que vous puissiez également extraire des conditions, il est donc très pratique de maîtriser Stream.

Recommended Posts

Java: utilisez Stream pour trier le contenu d'une collection
Utiliser des expressions Java lambda en dehors de l'API Stream
[java8] Pour comprendre l'API Stream
Mémo: [Java] Vérifiez le contenu du répertoire
[Java] Comment utiliser la méthode toString ()
Etudier comment utiliser le constructeur (java)
[Traitement × Java] Comment utiliser la boucle
[Java] [Maven3] Résumé de l'utilisation de Maven3
[Traitement × Java] Comment utiliser la classe
Comment trier une liste de SelectItems
Sortie du livre "Introduction à Java"
[Traitement × Java] Comment utiliser la fonction
[Java] Comment utiliser la classe Calendar
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe
[Java] Contenu de l'interface de collection et de l'interface de liste
Utilisez jenv pour activer plusieurs versions de Java
JAVA: jar, aar, affichez le contenu du fichier
Je veux var_dump le contenu de l'intention
Sortie de la façon d'utiliser la méthode slice
Comment utiliser la méthode replace () (Java Silver)
Java Bienvenue dans le marais des tableaux bidimensionnels
Collection expirée de java
[Java] Comment obtenir facilement la plus longue chaîne de caractères d'ArrayList à l'aide de stream
Comment écrire Scala du point de vue de Java
[Java] Comment obtenir la valeur maximale de HashMap
Résumé de l'API de communication Java (1) Comment utiliser Socket
Résumé de l'API de communication Java (3) Comment utiliser SocketChannel
Résumé de l'API de communication Java (2) Comment utiliser HttpUrlConnection
[Rails] Comment obtenir le contenu des paramètres forts
Résumé de l'utilisation du jeu de proxy dans IE lors de la connexion avec Java
[Java] Comment utiliser Map
[Java11] Résumé du flux -Avantages du flux-
Comment utiliser la classe Java
[Java] Comparateur de la classe Collection
[Java] Comment utiliser removeAll ()
Comment utiliser Java Map
[java] Raisons d'utiliser statique
Comment utiliser les variables Java
[Java] Introduction à l'API Stream
Entrée dans la console Java
Comment utiliser le modèle entraîné Tensorflow 2.0 avec Kotlin / Java
[À voir absolument pour l'apprenti ingénieur Java] Comment utiliser l'API Stream
J'ai essayé de résumer les bases de kotlin et java
Accédez à l'abréviation à partir de 5 exemples de listes Java en italique
20190803_Java & k8s sur Azure L'histoire d'aller au festival
Commande pour vérifier le nombre et l'état des threads Java
[Java] Pour connaître les informations de type des paramètres de type à l'exécution
[Ruby] Comment récupérer le contenu du double hachage
Java: dont le problème est plus rapide, en flux ou en boucle
Comment dériver le dernier jour du mois en Java
Comment modifier le contenu du fichier jar sans décompresser
[Java] Utilisez ResolverStyle.LENIENT pour bien gérer la date et l'heure