Стоит задача собрать в мапу студентов с самой большой оценкой из каждого класса. Класс студент
public class Student{
private String group;
private int mark;
public Student(String group, int mark){
this.group= group;
this.mark= mark;
}
// геттеры и сеттеры
Класс Main
Student student1 = new Student("a", 1);
Student student2 = new Student("a", 2);
Student student3 = new Student("b", 1);
Student student4 = new Student("b", 2);
Student student5 = new Student("c", 1);
Student student6 = new Student("c", 2);
List<Student> studentList = new ArrayList<>();
studentList.add(student1);
studentList.add(student2);
studentList.add(student3);
studentList.add(student4);
studentList.add(student5);
studentList.add(student6);
Главный вопрос: можно ли как-то адаптировать следующий код под stream API(хотя бы частично)?:
Set<Student> completed = new HashSet<>();
for (int i = 0; i < studentList.size(); ++i) {
List<Student> sameGroup= new ArrayList<>();
for (int j = 0; j < studentList.size(); ++j) {
if (studentList.get(i).getGroup().equals(studentList.get(j).getGroup())) {
sameGroup.add(studentList.get(j));
}
}
completed.add(Collections.max(sameGroup, Comparator.comparingInt(Student::getMark)));
}
Map<String, Student> map = new HashMap<>();
Iterator iterator = completed.iterator();
while (iterator.hasNext()){
Student student= (Student) iterator.next();
map.put(student.getGroup(), student);
}
Я пытался засунуть его в stream().map(), но в том или ином случае получал ошибку компиляции. Буду очень благодарен за любой совет/помощь.
Например, как-то так
Map<String, Student> map = studentList.stream()
.collect(Collectors.toMap(
Student::getGroup,
o -> o,
(o, o2) -> o.getMark() > o2.getMark() ? o : o2
));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я обычно использую VARCHAR(255) и в java пишу preparedStatementsetString(
В SVG тултип реализуется с помощью парного тега <title> Текст подсказки </title>
В js, если мне вдруг нужно будет, я смогу добавить новый метод для любого объектаНапример метод exist для массива: