当前位置: 首页 > 知识库问答 >
问题:

Java 8用供应商填充数组

黎曾笑
2023-03-14

我想写:

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

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

共有1个答案

逑和蔼
2023-03-14

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

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

对于与Object[]不同的类型,可以使用toArray(intfunction generator); liketoArray(yourtype[]::new)(归功于@holger)。

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

流还允许我们处理大多数“流行”的基元类型,它们是intlongdouble。例如,我们可以使用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 中选择合适的认证密钥 一