java stream map 返回list
时间: 2025-03-16 18:21:07 浏览: 24
### Java Stream API 使用 `map` 方法并将其结果收集到 `List` 中
在 Java 的 Stream API 中,可以使用 `map` 方法来转换流中的每个元素,并通过 `Collectors.toList()` 将其收集为一个新的 `List`。以下是具体的实现方式:
#### 示例代码
```java
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 定义原始字符串列表
List<String> words = Arrays.asList("apple", "banana", "orange");
// 使用 map 转换每个单词为首字母大写的形式
List<String> capitalizedWords = words.stream()
.map(word -> word.substring(0, 1).toUpperCase() + word.substring(1))
.collect(Collectors.toList());
// 输出结果
System.out.println(capitalizedWords);
}
}
```
上述代码展示了如何将一个字符串列表中的每个单词首字母转为大写字母[^2]。
- **`stream()`**: 将列表转化为流以便进一步操作。
- **`map(Function)`**: 对流中的每一个元素应用指定的函数,在此例子中是将每个单词的第一个字符变为大写。
- **`collect(Collectors.toList())`**: 将经过变换后的流重新组合成一个新列表。
如果需要处理更复杂的对象而非简单的字符串,则可以通过类似的逻辑完成映射和收集工作。例如,假设有一个节点类 `Node`,其中包含两个字段 `id` 和 `name`,则可以用如下方式进行映射:
#### 复杂对象示例
```java
class Node {
private String id;
private String name;
// 构造器、getter 和 setter 省略...
@Override
public String toString() {
return this.id + ": " + this.name;
}
}
// 主程序部分
public class Main {
public static void main(String[] args) {
List<Node> nodeList = Arrays.asList(
new Node("1", "Alice"),
new Node("2", "Bob"),
new Node("3", "Charlie")
);
// 映射 node 列表至仅包含名字的新列表
List<String> names = nodeList.stream()
.map(Node::getName)
.collect(Collectors.toList());
// 打印结果
System.out.println(names);
}
}
```
在这个复杂对象的例子中,我们利用了 `Node` 类型的对象及其 getter 方法 `getName()` 来提取所需的数据项[^1]。
#### 常见错误提示
当尝试将某些可能返回 `null` 的键或值放入 `toMap` 收集器时,可能会抛出 `NullPointerException`。因此需要注意输入数据的有效性和完整性。
---
###
阅读全文
相关推荐


















