使用流 API 填充集合

  • 本文关键字:填充 集合 API java
  • 更新时间 :
  • 英文 :


我只是在学习java.util.streamAPI,我正在寻找一种用一些数据快速填充集合的方法。

我想出了这段代码来添加 5 个随机数:

List<Integer> lottery = Stream.of(random.nextInt(90), random.nextInt(90), random.nextInt(90),random.nextInt(90),
random.nextInt(90)).collect(Collectors.toList());

但是,如果我必须添加数百个项目,这将是一个问题。有没有更简洁的方法可以使用java.util.streamAPI 来做到这一点?

(我显然可以用普通的方式循环...

谢谢

在这种情况API 只会使事情比常规循环更复杂,但您可以创建一个IntStream(或Stream<Integer>,具体取决于您将int转换为Integer的位置),它生成无限的随机数

IntStream rndStream = IntStream.generate(() -> rnd.nextInt(90));

现在,您可以使用limit()创建可以收集的非无限子流,例如

rndStream.limit(5).boxed().collect(Collectors.toList());

然而,这只是流欺骗,与使用一种名为List<Integer> getRandoms(int number)的方法相比没有任何优势,并且内部有一个规则循环。


没有理由使用此答案中显示的代码,因为它比替代方案更易读且更复杂。这只是演示了如何从无限生成的流中获取有限数量的元素。

使用Random.ints(long, int, int)

此页面上的其他人都在生成流,因为他们可以,但是 Java 已经有这样一个开箱即用的方法,Random.ints(long, int, int),从 Java 8 开始(因此是流的开始)。

只需像这样使用它:

List<Integer> lottery = rnd.ints(5, 0, 90)
.boxed()
.collect(Collectors.toList());

指令rnd.ints(5L, 0, 90)的意思是:"创建一个介于 0(包含)和 90(不包括)之间的 5 个整数的流"。因此,如果您想要 100 个数字而不是 5 个数字,只需将5更改为100.

这应该可以:

List<Integer> randomList = new ArrayList<>();
SecureRandom random = new SecureRandom();
IntStream.rangeClosed(1,100).forEach(value->randomList.add(random.nextInt(90)));

最新更新