Utilisez-vous Stream en Java?

Nouvelles fonctionnalités de Java 9 Stream

Java 9 ajoutera trois fonctionnalités à Stream.

・ Données cibles tout en satisfaisant la condition takeWhile ・ Les données qui remplissent la condition dropWhile sont exclues. ・ OfNullable Autoriser null

Mais je ne pense pas voir quelqu'un (ou source) qui utilise Stream au travail avant la nouvelle fonctionnalité. (Je n'ai pas beaucoup d'occasions d'utiliser de nouvelles choses au travail)

Si vous ne touchez pas à de nouvelles choses, elles seront laissées pour compte, alors j'ai jeté un coup d'œil à ce qu'elles étaient.

Quand utilisez-vous Stream en premier lieu?

Je pense que je vais probablement l'utiliser dans de tels moments.

・ En gros, vous pouvez écrire avec moins de description qu'avant, donc la source est rafraîchissante. -Comme les valeurs de retour de diverses API sont Stream, il ne peut pas être utilisé sans le savoir. -Je veux exécuter un traitement parallèle en utilisant parallel (). (Ajouté le 01/06/2017) -Créer une liste différente en utilisant le contenu de la liste. (Ajouté le 02/06/2017)

Comment utiliser Stream?

Exemple 1: boucler la liste et la transmettre à la méthode

List<String> list = Arrays.asList("Partie 1", "Partie 2", "Partie 3", "Partie 4", "Partie 5");
//Passer la chaîne de la liste à la méthode fuga de la classe Hoge
list.stream().forEach(Hoge::fuga);

Exemple 2: créer une liste d'entiers à partir d'une liste de chaînes

List<String> sl= Arrays.asList("11", "12", "13", "14", "15");
List<Integer> il = sl.stream().map(s -> Integer.parseInt(s)).collect(Collectors.toList());

Exemple 3: Après avoir récupéré tous les chemins de csv sous "C: \ temp", récupérez le nombre de fichiers commençant par "A"

Path target = Paths.get("C:\temp");
try(
    Stream<Path> paths = Files.find(target , Integer.MAX_VALUE, (p, a) -> p.getFileName().endsWith(".csv"));
){
    //Essayez de ne compter que les fichiers CSV commençant par "A"
    long c = paths.filter(p -> p.getFileName().startsWith("A")).count();
}

Le "->" qui apparaît ici et là est le "type lambda".

Le streamAPI a généralement un argument Consumer qui vous permet de passer des références de méthode ou des expressions lambda.

Eh bien, lorsque "->" apparaît, le côté gauche est l'argument, et le côté droit est le contenu de la méthode.

La référence de la méthode est écrite comme "Hoge :: fuga". Si vous venez de le lire, vous pouvez penser que les parenthèses de "Hoge.fuga (str)" sont omises.

Essayez de comparer

Écrivons à quel point la source se réduit en utilisant Stream.

■ Lors de l'utilisation de Stream

paths.filter(p -> p.getFileName().startsWith("A"))

■ Lorsque vous n'utilisez pas Stream

/**Partie filtre*/
private List<Path> filter(List<Path> paths) {
    List result = new ArrayList<>();
    for (Path p : paths) {
        if (isStartA(p)) {
            result.add(p);
        }
    }
    return result;
}
/**Pièce de style Lambda*/
private boolean isStartA(Path p) {
    return p.getFileName().startsWith("A");
}

Vous pouvez voir comment la description est réduite en utilisant les expressions Stream et lambda!

Résumé

En regardant les résultats ci-dessus, il semble qu'il vaut mieux utiliser la formule Stream ou Lambda plus bang bang, Quand il s'agit de l'utiliser réellement au travail, si vous ne dites pas "pour / tant que c'est interdit", la source sera foirée. C'est une source qui n'a pas de sens pour ceux qui ne savent pas. (Les gens qui ne comprennent pas ça se sentent mal)

Comme il a été mis à jour de manière pratique, j'aimerais également mettre à jour les humains!

Recommended Posts

Utilisez-vous Stream en Java?
[Java] N'utilisez pas "+" dans append!
Utiliser OpenCV avec Java
Utiliser PreparedStatement en Java
API Java Stream en 5 minutes
Faites Option.ou Null de Scala en Java
Faites HelloWorld avec Java / IntelliJ / Gradle
Utilisons Twilio en Java! (Introduction)
Ce que vous utilisez souvent lorsque vous faites du développement Web avec Java
Utilisez des clés composites dans Java Maps.
Pouvez-vous le faire? Java EE
Comment utiliser les classes en Java?
Dans Java 10, lorsque l'éclipse gradle est terminée et que JavaSE-1.10 sort, ...
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Utilisez OpenCV_Contrib (ArUco) avec Java! (Partie 2-Programmation)
Essayez d'utiliser l'API Stream en Java
Comment faire une conversion de base en Java
[Java] Utiliser la technologie cryptographique avec les bibliothèques standard
Utilisez "Rhino" qui exécute JavaScript en Java
Faites TensorFlow en Java. C'est facile, cependant. .. .. ..
Ne déclarez pas de variables dans List en Java
Comment écrivez-vous dans Scala qui a été écrit en Java? (Liste → Carte)
Partition en Java
Essayez Java 8 Stream
Changements dans Java 11
Janken à Java
API Java Stream
Étudier Java 8 (Stream)
[Java] Utilisez Collectors.collectingAndThen
À vous à qui on a dit "Ne pas utiliser Stream API" dans le champ
Taux circonférentiel à Java
Terminaison du flux Java
[Java] Traitement de flux
FizzBuzz en Java
Java 9 Facultatif :: stream
Soyez prudent si vous trouvez SHIFT-JIS en Java
Avez-vous besoin d'une implémentation de Java compatible avec la mémoire?
Utilisez OpenCV_Contrib (ArUco) avec Java! (Partie 1-Construire) (OpenCV-3.4.4)
Avec Tomcat, vous pouvez utiliser des espaces réservés ($ {...}) dans web.xml.
[Java] Utilisation de final dans la déclaration de variable locale
[JAVA] [Spring] [MyBatis] Utiliser IN () avec SQL Builder
Que faire lorsque vous pensez que vous ne pouvez pas Groovy-> Java avec IntelliJ IDEA CE
[Java] Pourquoi vous embêtez-vous à utiliser l'interface (Spring est également disponible)
Lire JSON en Java
Implémentation de l'interpréteur par Java
Application Janken en Java
Programmation par contraintes en Java
Exemple de code pour convertir List en List <String> dans Java Stream
Mettez java8 dans centos7
[Java] Remarque sur les collecteurs de flux
Je veux faire quelque chose comme "cls" en Java
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Interface appelable en Java
Utilisez java.time avec Jackson
Commentaires dans la source Java