微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java 8填充数组与供应商

如何解决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

流还使我们能够使用大多数“流行的”原始类型,即intlongdouble。例如,我们可以用来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[]

是使用@Hogle评论中的使用 创意 解决方

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] 举报,一经查实,本站将立刻删除。