Java 9 fügt Stream drei Funktionen hinzu.
・ Zieldaten bei Erfüllung der TakeWhile-Bedingung ・ Daten, die die dropWhile-Bedingung erfüllen, werden ausgeschlossen. ・ OfNullable Erlaube null
Aber ich glaube nicht, dass ich jemanden (oder eine Quelle) sehe, der Stream vor der neuen Funktion bei der Arbeit verwendet. (Ich habe nicht viele Möglichkeiten, neue Dinge bei der Arbeit zu nutzen)
Wenn Sie keine neuen Dinge anfassen, bleiben sie zurück, und ich habe mir kurz angesehen, wie sie waren.
Ich denke, ich werde es wahrscheinlich zu solchen Zeiten verwenden.
・ Grundsätzlich können Sie mit weniger Beschreibung als zuvor schreiben, sodass die Quelle aktualisiert wird.
Beispiel 1: Schleifen Sie die Liste und übergeben Sie sie an die Methode
List<String> list = Arrays.asList("Teil 1", "Teil 2", "Teil 3", "Teil 4", "Teil 5");
//Übergabe der Zeichenfolge in der Liste an die Fuga-Methode der Hoge-Klasse
list.stream().forEach(Hoge::fuga);
Beispiel 2: Erstellen Sie eine Ganzzahlliste aus einer Zeichenfolgenliste
List<String> sl= Arrays.asList("11", "12", "13", "14", "15");
List<Integer> il = sl.stream().map(s -> Integer.parseInt(s)).collect(Collectors.toList());
Beispiel 3: Nachdem Sie alle Pfade von csv unter "C: \ temp" abgerufen haben, ermitteln Sie die Anzahl der Dateien, die mit "A" beginnen.
Path target = Paths.get("C:\temp");
try(
Stream<Path> paths = Files.find(target , Integer.MAX_VALUE, (p, a) -> p.getFileName().endsWith(".csv"));
){
//Versuchen Sie, nur CSV zu zählen, das mit "A" beginnt.
long c = paths.filter(p -> p.getFileName().startsWith("A")).count();
}
Das "->", das hier und da erscheint, ist der "Lambda-Typ".
Die streamAPI verfügt normalerweise über ein Consumer-Argument, mit dem Sie Methodenreferenzen oder Lambda-Ausdrücke übergeben können.
Wenn "->" angezeigt wird, ist die linke Seite das Argument und die rechte Seite der Inhalt der Methode.
Die Methodenreferenz ist wie "Hoge :: fuga" geschrieben. Wenn Sie es nur lesen, können Sie denken, dass die Klammern von "Hoge.fuga (str)" weggelassen werden.
Schreiben wir, wie stark die Quelle mithilfe von Stream schrumpft.
■ Bei Verwendung von Stream
paths.filter(p -> p.getFileName().startsWith("A"))
■ Wenn Sie Stream nicht verwenden
/**Teil filtern*/
private List<Path> filter(List<Path> paths) {
List result = new ArrayList<>();
for (Path p : paths) {
if (isStartA(p)) {
result.add(p);
}
}
return result;
}
/**Lambda-Stil Teil*/
private boolean isStartA(Path p) {
return p.getFileName().startsWith("A");
}
Sie können sehen, wie die Beschreibung reduziert wird, indem Sie Stream- und Lambda-Ausdrücke verwenden!
Wenn man sich die obigen Ergebnisse ansieht, scheint es besser zu sein, die Stream- oder Lambda-Formel mehr Bang Bang zu verwenden. Wenn Sie es bei der Arbeit tatsächlich verwenden und nicht "für / solange verboten" sagen, wird die Quelle durcheinander gebracht. Es ist eine Quelle, die für diejenigen, die es nicht wissen, keinen Sinn ergibt. (Leute, die das nicht verstehen, fühlen sich schlecht)
Da es bequem aktualisiert wurde, möchte ich auch Menschen aktualisieren!
Recommended Posts