使用Java 8中的功能,转换列表的所有值的最简洁方法是什么?

The*_*tor 13 java collections lambda list java-8

使用Java 8的新功能,转换a的所有值的最简洁方法是List<String>什么?

鉴于这种:

List<String> words = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");
Run Code Online (Sandbox Code Playgroud)

我目前正在这样做:

for (int n = 0; n < words.size(); n++) {
    words.set(n, words.get(n).toUpperCase());
}
Run Code Online (Sandbox Code Playgroud)

Java 8中的新Lambdas,Collections和Streams API如何帮助:

  1. 就地转换值(不创建新列表)

  2. 将值转换为新的结果列表.

The*_*tor 47

这就是我想出的:

给出清单:

List<String> keywords = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");
Run Code Online (Sandbox Code Playgroud)

(1)将它们转换到位

也许我错过了它,似乎没有一个'apply'或'compute'方法,它将一个lambda用于List.所以,这与旧Java相同.我无法想到使用Java 8更简洁或更有效的方法.

for (int n = 0; n < keywords.size(); n++) {
    keywords.set(n, keywords.get(n).toUpperCase());
}
Run Code Online (Sandbox Code Playgroud)

虽然有这种方式并不比for(..)循环更好:

IntStream.range(0,keywords.size())
    .forEach( i -> keywords.set(i, keywords.get(i).toUpperCase()));
Run Code Online (Sandbox Code Playgroud)

(2)转换并创建新列表

List<String> changed = keywords.stream()
    .map( it -> it.toUpperCase() ).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • 对于(1)做`keywords.replaceAll(String :: toUpperCase)`. (25认同)