如何用Java Stream实现泛型方法打印嵌套列表所有元素
解决嵌套List的递归遍历打印问题
问题分析
你当前的实现只会打印List的顶层元素,遇到嵌套子List时会直接输出整个List实例(比如[2, 3, 4, [5]]),而不会展开内部元素。要实现统一输出所有底层数值,需要通过递归遍历处理嵌套结构。
解决方案
编写一个支持递归的泛型方法,对每个元素做类型判断:如果是List类型,就递归调用自身处理这个子List;否则直接打印元素。
完整可运行代码
import java.util.List; public class NestedListPrinter { public static void main(String[] args) { List<Object> list1 = List.of(1, List.of(2, 3, 4, List.of(5)), List.of(6, 7)); printNestedList(list1); System.out.println(); List<Integer> list2 = List.of(1, 2, 3, 4, 5, 6, 7, 8); printNestedList(list2); System.out.println(); // 两次调用均输出:1 2 3 4 5 6 7 8 } public static void printNestedList(List<?> list) { for (Object element : list) { if (element instanceof List<?>) { // 递归处理嵌套的子List printNestedList((List<?>) element); } else { // 可根据需求修改分隔符,比如改为逗号+空格:element + ", " System.out.print(element + " "); } } } }
代码说明
- 递归逻辑:通过
instanceof List<?>判断元素类型,遇到子List就递归拆解,直到遍历到最底层的非List元素。 - 泛型兼容:使用
List<?>作为参数,能接收任意类型的List(包括普通List<Integer>和嵌套的List<Object>)。 - 输出自定义:示例用空格分隔元素,你可以修改
System.out.print的内容,调整为逗号分隔或其他格式。
扩展优化(可选)
如果需要先收集所有底层元素再处理(而非直接打印),可以写一个返回扁平化List的递归方法:
import java.util.ArrayList; import java.util.List; public class NestedListFlattener { public static List<Object> flattenNestedList(List<?> list) { List<Object> result = new ArrayList<>(); for (Object element : list) { if (element instanceof List<?>) { result.addAll(flattenNestedList((List<?>) element)); } else { result.add(element); } } return result; } }
调用示例:
List<Object> flattenedList = flattenNestedList(list1); flattenedList.forEach(e -> System.out.print(e + " "));
内容的提问来源于stack exchange,提问作者shdoc
相关产品推荐
相关产品推荐

