我想出了这个:
ArrayList<Integer> randomIntegers = new ArrayList<>();
randomIntegers = Stream.generate(Math::random).map(n -> n * 10000)
.mapToInt(Double::intValue)
.limit(10)
.boxed()
.collect(Collectors.toCollection(ArrayList::new));
因为我对溪流很陌生:有什么更优雅,即更短,而至少同样可读(仍使用流)?
答案 0 :(得分:2)
您很少真正关心结果是否应存储到ArrayList
或任何其他List
实施中。因此,最好使用Collectors.toList()
代替Collectors.toCollection(ArrayList::new)
。此外,通常的做法是使用
import static java.util.stream.Collectors.*;
在这种情况下,您只需简写toList()
。
使用Random.ints(long, int, int)
作为来源,您可以在单个调用中生成0..10000
范围内的10个随机数。把所有东西放在一起,你会得到:
List<Integer> randomIntegers = new Random().ints(10, 0, 10000).boxed().collect(toList());
请注意,根据这些数字的进一步使用情况,您可能会考虑将它们存储到数组中:
int[] randomIntegers = new Random().ints(10, 0, 10000).toArray();
这种方式不仅更短,而且效率更高(CPU和内存方面),不需要装箱。
答案 1 :(得分:1)
使用java.util.Random
和IntStream
Random random = new Random();
random.ints(10, 0, 10000).boxed().forEach(randomIntegers::add);