En utilisant les nouvelles fonctionnalités de Java 8, quel est le moyen le plus concis de transformer toutes les valeurs d’un List<String>
?
Compte tenu de ceci:
List<String> words = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");
Je fais actuellement ceci:
for (int n = 0; n < words.size(); n++) {
words.set(n, words.get(n).toUpperCase());
}
Comment la nouvelle API Lambdas, Collections and Streams de Java 8 peut-elle aider:
transformer les valeurs sur place (sans créer une nouvelle liste)
transformer les valeurs en une nouvelle liste de résultats.
Voici ce que je suis venu avec:
Compte tenu de la liste:
List<String> keywords = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");
Peut-être me manque-t-il, il ne semble pas y avoir de méthode 'apply' ou 'compute' qui prend un lambda pour List. Donc, c'est la même chose qu'avec l'ancien Java. Je ne peux pas penser à un moyen plus concis ou efficace avec Java 8.
for (int n = 0; n < keywords.size(); n++) {
keywords.set(n, keywords.get(n).toUpperCase());
}
Bien qu'il existe ce moyen qui n'est pas meilleur que la boucle for (..):
IntStream.range(0,keywords.size())
.forEach( i -> keywords.set(i, keywords.get(i).toUpperCase()));
List<String> changed = keywords.stream()
.map( it -> it.toUpperCase() ).collect(Collectors.toList());
Peut-être en utilisant le nouveau concept de flux dans les collections:
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());