利用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 如何提供帮助:
就地转换值(不创建新列表)
将值转换为新的结果列表。
这是我想出的:
给定列表:
List<String> keywords = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");
(1) 原地改造
也许我错过了它,似乎没有为 List 使用 lambda 的“应用”或“计算”方法。所以,这与旧 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());