gon*_*ard 23 java functional-programming java-8
有没有办法用java 8填充数组Supplier?
我想写:
Supplier<Object> supplier = () -> new Object();
Object[] array = new Object[size];
Arrays.fill(array, supplier);
Run Code Online (Sandbox Code Playgroud)
注意:我知道我可以编写自己的方法.
Psh*_*emo 29
如果您想用来自供应商的数据填充现有数组,请参阅Stuart Marks发布的答案,或使用来自@ Hogler 评论的创意解决方案:
Object[] array = Stream.generate(supplier)
.limit(arraySize)
.toArray(); // will generate new *Object[]* array
Run Code Online (Sandbox Code Playgroud)
如果你没有创建填充了供应商生成的结果的新数组,你可以使用
String[] array = Stream.generate(supplier)
.limit(10)
.toArray(String[]::new); //now *String[]* array will be returned
Run Code Online (Sandbox Code Playgroud)
对于不同类型比Object[]你可以使用toArray(IntFunction<YourType[]> generator);像toArray(YourType[]::new)(再次学分 @Holger).
int[] array = IntStream.generate(()->1)
.limit(5)
.toArray(); //returns `new Int[]{1,1,1,1,1}
Run Code Online (Sandbox Code Playgroud)
Stu*_*rks 21
<T> void Arrays.setAll(T[] array, IntFunction<T> generator)
Run Code Online (Sandbox Code Playgroud)
这不需要供应商; 相反,它IntFunction的输入参数是要填充的数组索引.如果您的对象不依赖于目标数组索引,则可以忽略该参数并按如下方式调用供应商:
Arrays.setAll(array, i -> supplier.get());
Run Code Online (Sandbox Code Playgroud)
基元数组以及引用类型数组都存在重载.parallelSetAll()除了并行之外,还有相应的一系列方法可以做同样的事情.(它在内部使用流.)