Как применить несколько значений к одному значению?

У меня есть два класса Group и Student. В классе Group есть метод getGroup и setGroup, в классе Student есть метод getName setName getLastName setLastName. Есть еще два параллельных класса которые рандомно создают List из 200 Student и List из 10 Group:

public List<Student> student() {
    List<String> name = generatedNames();
    List<String> lastName = generatedSurname();
    return IntStream.range(0, name.size()).mapToObj(i -> new Student(name.get(i), surname.get(i)))
            .collect(Collectors.toList());
}

public List<Group> group(){
    List<Integer> generatedID = groupID();
    return IntStream.range(0, generatedID.size())
            .mapToObj(i -> new GroupConstructor(generatedID.get(i)))
            .collect(Collectors.toList());
}

вторые сутки не могу придумать метод который мог бы для каждой Group (которых 10) добавить максимум по 30 Student. Реально ли это сделать ?


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

Автор решения: Олексій Моренець
List<Student> studentsWithGroups(int maxStudents) {
    List<Student> studentList = student();
    List<Group> groups = group();
    Random rnd = new Random();
    studentList.forEach(student -> {
        while (true) {
            int groupId = rnd.nextInt(groups.size());
            long studentsCount = studentList.stream().filter(s -> s.getGroup() != null && s.getGroup().getId() == groupId).count();
            if (studentsCount <= maxStudents) {
                student.setGroup(groups.get(groupId));
                break;
            }
        }
    });
    return studentList;
}
→ Ссылка