使用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如何提供帮助:
就地转换值(不创建新列表)
将值转换为新的结果列表。
答案 0 :(得分:43)
这就是我提出的:
鉴于清单:
List<String> keywords = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");
也许我错过了它,似乎没有一个'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()));
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());