随机使用流而不重复,以及有关排序Java的问题

时间:2018-11-07 11:54:47

标签: java random lambda java-stream

我正在尝试使用流获取8个随机整数,但是下面的代码存在的问题是distinct()删除了重复项,如果有重复项,它将不会给我8个整数。

目标:

1。获取8个随机整数(无重复)

2。添加到列表

3。对前7个整数进行排序。

我知道Collections.sort(winlist.subList(0,6));适用于排序,但我试图查看是否可以仅通过流来完成。

    new Random()
            .ints (8, 0, 64)
            .distinct()
            .sorted()
            .forEach (Integer -> System.out.print (Integer + "\n"));

1 个答案:

答案 0 :(得分:8)

使用无限流,并在独特操作后 对其进行限制。

new Random().ints(0, 64).distinct().limit(8).sorted().forEach(System.out::println);

这将按排序顺序打印[0,64)范围内的8个随机整数。

仅排序前7个数字,使用具有7个数字的流并按传统方式生成第8个数字会更容易。但是,如果您真的想拥有一个包含所有8个数字的流,则可以通过串联两个流来创建一个流。

IntStream.concat(
  new Random().ints(0, 64).distinct().limit(7).sorted(),
  new Random().ints(0, 64)
).distinct().limit(8).forEach(System.out::println);