是否有任何方法可以将以下for循环转换为使用IntStream
?
for (int i =1; i<=5; i++)
{
nums.add(n.nextInt(45)+1);
}
我非常简单地尝试了以下内容:
IntStream.range(1,5).forEach(nums.add(n.nextInt(45)+1));
但它输出以下错误:
不兼容的类型:boolean无法转换为IntConsumer IntStream.range(1,5).forEach(nums.add(n.nextInt(45)1));
答案 0 :(得分:9)
您缺少lambda表达式的参数:
IntStream.rangeClosed(1,5).forEach(i -> nums.add(n.nextInt(45)+1));
此外,如果您希望索引从1到5,则需要rangeClosed
。
尽管如此,有更简洁的方法可以使用IntStream
来生成随机数。例如:
Random rand = new Random();
int[] nums = rand.ints(5,1,46).toArray();
答案 1 :(得分:4)
如果n
是Random
,您可以使用
n.ints(5, 1, 46).forEach(nums::add);
但如果您实际上是在创建列表而不是添加到现有列表,则可以使用
List<Integer> nums = n.ints(5, 1, 46).boxed().collect(Collectors.toList());
通常情况下,您不需要专门的Random
实例,ThreadLocalRandom
就足够了,效率更高:
List<Integer> nums = ThreadLocalRandom.current().ints(5, 1, 46)
.boxed().collect(Collectors.toList());