Java 8 用供应商填充数组 [英] Java 8 fill array with supplier

查看:20
本文介绍了Java 8 用供应商填充数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法使用 java 8 供应商 ?

Is there a way to fill an array using java 8 Supplier ?

我想写:

Supplier<Object> supplier = () -> new Object();
Object[] array = new Object[size];
Arrays.fill(array, supplier);

注意:我知道我可以编写自己的方法.

Note: I know i could write my own method.

推荐答案

如果您想创建新数组填充由供应商生成的结果,您可以使用>

Object[] array = Stream.generate(supplier)
                       .limit(arraySize)
                       .toArray(); // will generate new *Object[]* array

对于与 Object[] 不同的类型,您可以使用 toArray(IntFunction generator); 就像 toArray(YourType[]::新)(学分 @Holger).

For different types than Object[] you can use toArray(IntFunction<YourType[]> generator); like toArray(YourType[]::new) (credits to @Holger).

String[] array  = Stream.generate(supplier)
                        .limit(10)
                        .toArray(String[]::new); //now *String[]* array will be returned

Streams 还允许我们使用大多数流行"的原始类型,它们是 int longdouble.例如,我们可以使用 IntStream#toArrayIntStream 创建 int[] 保存元素.要使用来自供应商的元素填充"IntStream,我们可以使用 IntStream.generate(intSupplier)

Streams also allow us to work with most "popular" primitive types which are int long and double. For instance we can use IntStream#toArray to create int[] holding elements from IntStream. To "fill" IntStream with elements from supplier we can use IntStream.generate(intSupplier) like

int[] array = IntStream.generate(()->1)
                       .limit(5)
                       .toArray(); //returns `new Int[]{1,1,1,1,1}

<小时>

如果您想用来自供应商的数据填充已经存在的数组,请参阅answerStuart Marks 发布,基于 Arrays.setAll(array, supply) 除了处理对象数组,还支持一些基本类型数组:double[] int[]长[] .


In case when you want to fill already existing array with data from Supplier see answer posted by Stuart Marks based on Arrays.setAll(array, supplier) which aside from handling arrays of objects also supports some arrays of primitive types: double[] int[] and long[] .

其他选择是使用来自@Hogler's的创意解决方案a> 评论:

Other alternative is to use use creative solution from @Hogler's comment:

Arrays.asList(array).replaceAll(x -> supplier.get()); 
//you can even overwrite a range using `subList`

请注意 Jon Skeet 在 https://stackoverflow.com/a/1467940 解释的原始类型数组的问题一>.

just be aware of its problems with array of primitive types explained by Jon Skeet at https://stackoverflow.com/a/1467940.

这篇关于Java 8 用供应商填充数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆