使用流和关于排序Java的问题随机无重复

New*_*Pea 3 java random lambda java-stream

我试图使用流获得8个随机int,但下面的代码的问题是distinct()删除重复,如果有任何重复,将不会给我8 int.

目标:

1.获取8随机int(无重复)

2.添加到列表

3.排序前7个int.

我知道Collections.sort(winlist.subList(0,6)); 适用于排序,但我试图看看它是否可以只用流完成.

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

Soc*_*owi 8

使用循环流并在不同操作后限制它.

new Random().ints(0, 64).distinct().limit(8).sorted().forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

这将按排序顺序打印范围[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);
Run Code Online (Sandbox Code Playgroud)