使用流将随机整数分配给ArrayList

时间:2015-12-06 00:01:13

标签: java random java-stream

我想出了这个:

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));

因为我对溪流很陌生:有什么更优雅,即更短,而至少同样可读(仍使用流)?

2 个答案:

答案 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.RandomIntStream

,更简洁,更易阅读
Random random = new Random();
random.ints(10, 0, 10000).boxed().forEach(randomIntegers::add);