Erstellt Java 8 nach der Verwendung von Stream "filter" und "collect" eine neue Liste?

7

Ich habe Code mit Java8:

%Vor%

Ursprüngliche Liste ist [3, 5, 4, 2, 5]. Nach der Operation "Filter" und "Sammeln" ändert sich die Liste zu [3, 5, 4, 5].

Erfolgen alle Vorgänge auf der ursprünglichen Liste und wird keine neue Liste erstellt? Oder nach "Filter" und "Sammeln" -Operation, eine neu erstellte Liste zurückgeben und Originalliste ignorieren?

    
coderz 08.01.2016, 00:19
quelle

5 Antworten

16

Der Aufruf von collect mit Collectors.toList() erstellt eine neue Liste. Die ursprüngliche Liste wird durch das Streaming nicht beeinflusst.

    
Mureinik 08.01.2016, 00:22
quelle
10

Wenn Sie die ursprüngliche Liste tatsächlich ändern möchten, sollten Sie removeIf :

%Vor%     
Tagir Valeev 08.01.2016 05:14
quelle
3

Stream-Vorgänge sind entweder intermediär oder terminal. Zwischenoperationen geben einen Stream zurück, sodass Sie mehrere Zwischenoperationen verketten können. Terminal -Operationen geben void oder etwas anderes zurück.

Die meisten Stream-Vorgänge stören nicht, dh sie ändern nicht die Datenquelle des Streams. Aber indem Sie die Methode collect aufrufen, erstellen Sie eine neue Liste und weisen sie list

zu     
Chris 08.01.2016 01:05
quelle
1

Versuchen Sie Folgendes:

%Vor%     
David Pérez Cabrera 08.01.2016 00:25
quelle
1

Mit Hilfe der Guava Lists.transform () -Funktion können Sie nachvollziehen, warum eine neue Liste generiert werden muss. Vor JDK 7 wird dringend empfohlen, die Funktion "Lists.transform ()" zu implementieren.

    
Jason.chen 06.09.2017 05:18
quelle

Tags und Links