如何用Java 8 Stream API打印List<List<String>>中的值?Java 8支持嵌套流吗?
Java 8 Stream 处理 List<List> 指南
一、打印集合中的所有值
针对List<List<String>>类型的嵌套集合,有两种常见的Stream处理方式来打印内部值:
1. 扁平化后打印(忽略层级)
使用flatMap()方法将嵌套的List<String>逐个转换为Stream,再合并成一个全局Stream,之后直接遍历打印:
import java.util.Arrays; import java.util.List; public class NestedListDemo { public static void main(String[] args) { List<List<String>> nestedList = Arrays.asList( Arrays.asList("apple", "banana"), Arrays.asList("cherry", "date", "elderberry") ); // 扁平化流并打印每个元素 nestedList.stream() .flatMap(List::stream) .forEach(System.out::println); } }
输出结果:
apple banana cherry date elderberry
2. 保留层级的嵌套打印
如果需要区分不同内部列表的元素,可以在外部流的forEach()中再次创建内部流,实现嵌套遍历:
// 保留层级的打印方式 nestedList.stream() .forEach(innerList -> { System.out.println("新列表开始:"); innerList.stream().forEach(item -> System.out.println(" " + item)); });
输出结果:
新列表开始: apple banana 新列表开始: cherry date elderberry
二、Java 8 中的嵌套流特性
Java 8完全支持嵌套流特性。所谓嵌套流,就是在流的处理流程中,对每个元素(这里是List<String>类型的元素)再次创建并操作一个子流,本质是流的嵌套使用。
上面的两种打印方式都是嵌套流的典型应用:
- 第一种通过
flatMap()将嵌套流"扁平化"为单一流,是嵌套流的简化处理; - 第二种直接在外部流的操作中启动内部流,是更直观的嵌套流使用场景。
除了打印,你还可以基于嵌套流做更多操作,比如过滤内部列表的元素、转换元素类型、统计嵌套集合的元素总数等。
内容的提问来源于stack exchange,提问作者Curious Coder
相关产品推荐
相关产品推荐

