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

时间:2013-10-30 07:59:02

标签: java list collections lambda java-8

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

鉴于此:

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

我目前正在这样做:

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

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

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

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

2 个答案:

答案 0 :(得分:43)

这就是我提出的:

鉴于清单:

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

(1)将它们转换到位

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

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

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

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

(2)转换并创建新列表

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

答案 1 :(得分:0)

也许在集合中使用新的流概念:

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());