Java能否使用inline function/lambda内联声明并填充数组?
Java inline lambda填充数组实现方案
你给出的示例代码无法直接运行,因为lambda表达式本身是函数式接口的实例,不能直接赋值给数组类型,需要调用对应方法拿到返回值才能完成赋值。
方式1:Supplier包装inline lambda实现
完全符合你要的用独立代码块声明并填充数组的需求:
import java.util.ArrayList; import java.util.function.Supplier; final int NUM_NAMES = 10; // 强制转换lambda为Supplier实例后调用get()拿到数组结果 String[] names = ((Supplier<String[]>) () -> { ArrayList<String> list = new ArrayList<>(); for (int i = 0; i < NUM_NAMES; i++) { list.add("Name " + i); } return list.toArray(new String[0]); }).get();
方式2:Stream API简化实现(Java 8及以上版本支持)
如果填充逻辑不需要复杂的分支判断,用Stream写法更简洁,不需要额外包装函数式接口:
import java.util.stream.IntStream; final int NUM_NAMES = 10; String[] names = IntStream.range(0, NUM_NAMES) .mapToObj(i -> "Name " + i) .toArray(String[]::new);
补充说明
- 两种写法都支持在声明数组变量的同时完成填充,不需要拆分声明、赋值两步操作
- 如果填充逻辑非常复杂,更推荐第一种写法,代码可读性更高
内容的提问来源于stack exchange,提问作者Matt Ryan
相关产品推荐
相关产品推荐

