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.
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)
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.
É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!
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