You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 8如何用一行代码实例化并填充ArrayList?

Java 8 一行式初始化并填充 ArrayList 的方案

当然可以实现!Java 8 引入的 Stream API 完美解决了这个问题,能写出和 Python 列表推导式一样简洁的一行代码,不用再分开做实例化和插入操作。

两种核心写法:

1. 以 List 接口接收(无需强指定 ArrayList 类型)

如果你的变量声明是List<Integer>,可以直接借助Collectors.toList()完成:

List<Integer> numberList = IntStream.range(0, n + 1)
                                    .filter(number -> number % 3 == 0)
                                    .boxed()
                                    .collect(Collectors.toList());

这里的boxed()是关键步骤——把IntStream中的基础类型int转换成包装类Integer,适配ArrayList的泛型要求。

2. 明确生成 ArrayList 实例

如果必须要ArrayList<Integer>类型(而非List接口),可以用Collectors.toCollection()指定具体的集合实现:

ArrayList<Integer> numberList = IntStream.range(0, n + 1)
                                         .filter(number -> number % 3 == 0)
                                         .boxed()
                                         .collect(Collectors.toCollection(ArrayList::new));

这个写法会直接生成ArrayList实例,完全匹配你想要的“一行完成实例化+元素插入”的需求。

额外补充(Java 9+ 简化写法)

如果你的项目使用 Java 9 及以上版本,还有更简洁的不可变集合写法,但注意List.of()返回的是不可变列表,后续无法添加元素:

List<Integer> numberList = List.of(IntStream.range(0, n + 1)
                                              .filter(number -> number % 3 == 0)
                                              .boxed()
                                              .toArray(Integer[]::new));

但如果需要可变的ArrayList,还是推荐前面 Stream + toCollection的方案。

这样一行代码就完成了所有操作,和你 Python 里的numberList = [number for number in range(0, n + 1) if number % 3 == 0]功能完全等价!

内容的提问来源于stack exchange,提问作者Alessandro Bardini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:28:42