java - 使用 Java 8 中的特性,转换列表中所有值的最简洁方法是什么?

标签 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. 将值转换为新的结果列表。

最佳答案

这是我想出的:

给定列表:

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

关于java - 使用 Java 8 中的特性,转换列表中所有值的最简洁方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19676750/

相关文章:

c# - ArrayList 究竟存储什么?

java - 即使有基本情况,我的代码也会导致 StackOverflowError

c# - 当项目最初必须可变时返回不可变集合

java - 索引 1 处的绑定(bind)值为空

c++ - std::list 按索引删除元素

python - 如何从Excel中读取数据并设置数据类型

python - 子类化 Python 列表以验证新项目

java - 如何在Java列表中找到所有最大值?

java - TreeMap 操作的时间复杂度- subMap, headMap, tailMap

java - 使用 GridLayout 对齐文本字段输入时出现问题