Как заполнить Arraylist случайными цифрами?

Мысленно отправляю плюсы в карму каждому, кто подскажет)

Итак, есть задача:

Создать 2 массива Arraylist по 7 цифр в каждом, а затем заполнить их случайными числами от 0 до 9 включительно. После чего вывести эти два массива в консоль так, чтобы их числа были отсортированы - от большего к меньшему. Условный пример того, что нужно увидеть в консоли в итоге:

[0,2,5,6,7,8,9]

[0,1,1,5,6,7,9]

И вот, собственно, ключевой вопрос:

Как в коде ниже заполнить списки winningNumbers и playersNumbers случайными числами, а потом отсортировать их по возрастанию?

import java.util.ArrayList;

public class lottery {
    public static void main(String[] args) {
        ArrayList winningNumbers = new ArrayList<>();
        ArrayList playersNumbers = new ArrayList<>();
    }
}

Ответы (2 шт):

Автор решения: Gleb Kuznetsov

Сгенерировать список примерно так:

var list = new Random().ints(0, 10).limit(7).boxed().collect(Collectors.toList());

Напечатать в консоль сортированый список в обратном порядке:

var reverseSortedList = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList())
System.out.println(reverseSortedList);
→ Ссылка
Автор решения: Nowhere Man

Приведённый код напоминает начало реализации некой лотереи, судя по названиям списков playerNumbers, winningNumbers, поэтому скорее всего дубликаты не должны допускаться в обоих списках.

Для генерации списков без дубликатов при помощи Stream API следует применить операцию Stream::distinct перед ограничением длины списка:

public static List<Integer> randomList(int min, int maxIncl, int count) {
    return new Random() // или более непредсказуемый генератор SecureRandom()
        .ints(min, maxIncl + 1) // IntStream, значения [min, maxIncl]
        .distinct()     // уникальные значения (дубликаты исключены)
        .limit(count)   // ограничить длину списка
        .sorted()       // сортировать по возрастанию
        .boxed()        // Stream<Integer>
        .collect(Collectors.toList()); // или toList() JDK 16+
}

List<Integer> winningNums = randomList(0, 9, 7);
List<Integer> playerNums = randomList(0, 9, 7);

Или же можно просто сгенерировать список из всех допустимых значений (от 0 до 9), перемешать его используя Collections.shuffle, а затем взять нужное количество элементов и отсортировать его.

public static List<Integer> randomList(int min, int maxIncl, int count) {
    List<Integer> allNums = IntStream.rangeClosed(min, maxIncl)
        .boxed()
        .collect(Collectors.toList());
    Collections.shuffle(allNums);

    return IntStream.range(0, Math.min(count, allNums.size())) // индексы
        .mapToObj(allNums::get) // Stream<Integer>
        .sorted()       // сортировать по возрастанию
        .collect(Collectors.toList());
}
→ Ссылка