wake-up-neo.com

Wie lassen sich mithilfe der Funktionen in Java 8 alle Werte einer Liste am besten umwandeln?

Wie lassen sich mit den neuen Funktionen von Java 8 alle Werte eines List<String> am einfachsten umwandeln?

In Anbetracht dessen:

List<String> words = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");

Ich mache gerade das:

for (int n = 0; n < words.size(); n++) {
    words.set(n, words.get(n).toUpperCase());
}

Wie kann die neue Lambdas, Collections und Streams-API in Java 8 helfen:

  1. werte vor Ort umwandeln (ohne neue Liste zu erstellen) 

  2. wandeln Sie die Werte in eine neue Ergebnisliste um.

12
The Coordinator

Das ist was ich mir ausgedacht habe:

In Anbetracht der Liste:

List<String> keywords = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");

(1) Verwandeln Sie sie an Ort und Stelle

Vielleicht vermisse ich es, es scheint keine "Apply" - oder "Compute" -Methode zu geben, die ein Lambda für List benötigt. Dies ist also das gleiche wie bei altem Java. Ich kann mir mit Java 8 keinen prägnanteren oder effizienteren Weg vorstellen. 

for (int n = 0; n < keywords.size(); n++) {
    keywords.set(n, keywords.get(n).toUpperCase());
}

Obwohl es diesen Weg gibt, der nicht besser als die for (..) - Schleife ist:

IntStream.range(0,keywords.size())
    .forEach( i -> keywords.set(i, keywords.get(i).toUpperCase()));

(2) Transformieren Sie und erstellen Sie eine neue Liste

List<String> changed = keywords.stream()
    .map( it -> it.toUpperCase() ).collect(Collectors.toList());
42
The Coordinator

Möglicherweise verwenden Sie das neue Stream-Konzept in Sammlungen:

List<String> keywords = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");
//(1)
keywords = keywords.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());
//(2)
List<String> uppercaseKeywords = keywords.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());
0
jsrmalvarez