Как применить несколько значений к одному значению?
У меня есть два класса 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;
}