mpn*_*pnm 2 java list java-stream
我正在尝试生成一个随机的整数列表,如下所示:
private static int nextElement() {
Random r = new Random();
return r.nextInt(100);
}
public static void main(String[] args) {
Integer[] integers = Stream.generate(nextElement())
.limit(200)
.toArray(Integer[]::new);
}
Run Code Online (Sandbox Code Playgroud)
该错误在 下显示为红色波浪线generate,说明如下:
The method generate(Supplier<? extends T>) in the type Stream is not
applicable for the arguments (int)
Run Code Online (Sandbox Code Playgroud)
我认为这意味着for的返回类型nextElement()不能是 an int,但我可能错了。如何修复此代码,以便可以生成随机整数列表?
当你打电话时nextElement(),你会得到一个int. 但是generate想要一个Supplier<T>. 一个供应商将被调用generate,它并不意味着你调用。所以:
Stream.generate(YourClass::nextElement).limit(200).toArray(Integer[]::new);
Run Code Online (Sandbox Code Playgroud)
或者
Stream.generate(() -> nextElement()).limit(200).toArray(Integer[]::new);
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用,可以通过避免使用装箱整数来改进您的代码IntStream:
int[] integers = IntStream.generate(YourClass::nextElement).limit(200).toArray();
Run Code Online (Sandbox Code Playgroud)
该Stream#generate(Supplier)方法接受一个Supplier参数。但是,您正在传递#nextElement()直接调用的结果,即int. 简单的解决方法是使用:
Stream.generate(() -> nextElement())...
Run Code Online (Sandbox Code Playgroud)
的() -> nextElement()是一个lambda表达式,是一个实现Supplier<Integer>。它也可以被写成方法参考:EnclosingClass::nextElement。
话虽如此,有一种更简单的方法可以使用 生成随机数流Random#ints(long,int,int),它:
返回一个流,产生给定的 streamSize 数量的伪随机 int 值,每个值都符合给定的原点(包含)和边界(不包含)。
下面的示例将生成范围 [0,100) 中的 200 个随机数:
int[] array = new Random().ints(200, 0, 100).toArray();
Run Code Online (Sandbox Code Playgroud)
以上还具有使用 的好处,IntStream它可以让您使用int而不是Integer.
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |