16

使用 Java 8 的新特性,转换 a 的所有值的最简洁方法是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. 将值转换为新的结果列表。

4

2 回答 2

52

这就是我想出的:

鉴于列表:

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

(1) 就地改造

也许我错过了它,似乎没有一个“应用”或“计算”方法需要一个 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());
于 2013-10-30T07:59:02.390 回答
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());
于 2013-10-30T08:21:58.553 回答