Случайный без дубликатов с использованием потока и вопросов о сортировке Java - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь получить 8 случайных чисел int с использованием потока, но проблема с кодом ниже заключается в том, что different () удаляет дубликаты, которые не дадут мне 8 int, если бы был какой-либо дубликат.

Цель:

1.Получить 8 случайных int (без дубликатов)

2.Добавить в список

3.Сортировать первые 7 int.

Я знаю Collections.sort (winlist.subList (0, 6)); работает для сортировки, но я пытаюсь понять, можно ли это сделать только с помощью stream.

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

1 Ответ

0 голосов
/ 07 ноября 2018

Используйте бесконечный поток и ограничьте его после отдельной операции.

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

Это выведет 8 случайных чисел из диапазона [0,64) в отсортированном порядке.

Чтобы отсортировать только первые 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);
...