我想写:
Supplier<Object> supplier = () -> new Object();
Object[] array = new Object[size];
Arrays.fill(array, supplier);
注意:我知道我可以编写自己的方法。
如果您想创建新的数组,其中填充由供应商生成的结果,您可以使用
Object[] array = Stream.generate(supplier)
.limit(arraySize)
.toArray(); // will generate new *Object[]* array
对于与Object[]
不同的类型,可以使用toArray(intfunction
liketoArray(yourtype[]::new)
(归功于@holger)。
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(intsuppliver)
,如下所示
int[] array = IntStream.generate(()->1)
.limit(5)
.toArray(); //returns `new Int[]{1,1,1,1,1}
如果您想用来自供应商的数据填充现有的数组,请参见Stuart Marks基于arrays.setAll(array,Supplier)
发布的答案,它除了处理对象数组之外,还支持一些基元类型的数组:double[]
int[]
和long[]
。
另一种选择是使用@Hogler评论中的use creative solution:
Arrays.asList(array).replaceAll(x -> supplier.get());
//you can even overwrite a range using `subList`
请注意Jon Skeet在https://stackoverflow.com/a/1467940解释的基元类型数组的问题。
问题内容: 有没有一种方法可以使用Java 8填充数组? 我想写: 注意:我知道我可以编写自己的方法。 问题答案: 如果您要 创建一个新数组,其中 填充了供应商生成的结果,则可以使用 对于不同类型比你可以使用像学分。 流还使我们能够使用大多数“流行的”原始类型,即 和。例如,我们可以用来从创建保持元素。为了“填充” 来自供应商的元素,我们可以像 如果要用Supplier的数据填充 现有的数组 ,请
为什么供应商只支持无参数构造函数? 如果默认构造函数存在,我可以这样做: 但如果唯一的构造函数采用字符串,我必须这样做:
我想用 使用请求构造函数参数的异常类型。类似这样的事情: 有没有一种方法可以创建一个供应商来传递我的参数值?
我必须用奇数的范围(这里是)填充数组:1,3,5,7,9...但我总是在每个奇数之间有一个0,我不明白为什么。 注:注释中大写字母下的代码是由我们的教授给出的... 输出:
Oracle 的 Java SE 的 JSSE 实现是包含了一个名为 SunJSSE 的供应商,通过 JCA 来预装和预注册。这个供应商提供以下加密服务: SSL 3.0 和 TLS 1.0 安全协议的实现 最常见 SSL 和 TLS 密码套件的实现,其中包括认证、密钥协议、加密和完整性保护 一个基于 x.509 的密钥管理器的实现,用于从标准的 JCA keystore 中选择合适的认证密钥 一