如何解决Java 8填充数组与供应商
如果您要 填充了供应商生成的结果,则可以使用
Object[] array = Stream.generate(supplier)
.limit(arraySize)
.toArray(); // will generate new *Object[]* array
对于不同类型比Object[]
你可以使用toArray(IntFunction<YourType[]>generator);
像toArray(YourType[]::new)
学分。
String[] array = Stream.generate(supplier)
.limit(10)
.toArray(String[]::new); //Now *String[]* array will be returned
流还使我们能够使用大多数“流行的”原始类型,即int
long
和double
。例如,我们可以用来IntStream#toArray
从创建int[]
保持元素IntStream
。为了“填充”IntStream
来自供应商的元素,我们可以IntStream.generate(intsupplier)
像
int[] array = IntStream.generate(()->1)
.limit(5)
.toArray(); //returns `new Int[]{1,1,1,1,1}
如果要用supplier的数据填充 ,请参阅[StuartMarks发布的答案,该答案的基础是,除了处理对象数组之外,该数组还支持一些 基本类型的数组:和。Arrays.setAll(array, supplier)
__double[]
int[]``long[]
Arrays.asList(array).replaceAll(x -> supplier.get());
//you can even overwrite a range using `subList`
在java.util.Arrays
里面
<T> void Arrays.setAll(T[] array, IntFunction<T> generator)
这不需要供应商。取而代之的是,IntFunction
其输入参数是要填充的数组索引。如果您的对象不依赖于目标数组索引,则可以忽略该参数并像这样调用供应商:
Arrays.setAll(array, i -> supplier.get());
基本数组和引用类型数组都有重载。parallelSetAll()
除了并行之外,还有相应的方法家族可以执行相同的操作。(它在内部使用流。)
解决方法
有没有一种方法可以使用Java
8填充数组Supplier
?
我想写:
Supplier<Object> supplier = () -> new Object();
Object[] array = new Object[size];
Arrays.fill(array,supplier);
注意:我知道我可以编写自己的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。