Member 14130201 Ответов: 0

Получите наивысшее значение с помощью java stream group by


Я хотел бы получить самую высокую оценку группы по идентификатору .Если два самых высоких балла одинаковы, то я хотел бы получить самый высокий балл на основе самого низкого необязательного идентификатора.
Я хотел бы получить его в потоке Java.Пока что у меня код работает.Есть ли какой-нибудь эффективный способ переписать этот код в потоке java

Пример :

список массивов:

ID: 1 Оценка:80 OptionalId:1
ID: 1 Оценка:90 OptionalId:2
ID: 1 Оценка:90 OptionalId:3
ID: 2 Оценка:80 OptionalId:1
ID: 2 Оценка:100 OptionalId:3
ID: 2 Оценка:100 OptionalId:5

Результат должен быть таким

ID: 1 Оценка 90 OptionalId:2
ID 2 Оценка 100 OptionalId:3

Что я уже пробовал:

records=record.Person(batchNumber);
List<Person> highestRecords = new ArrayList<>();for(
Person s:records)
  {
if(!highestRecords.isEmpty()) {
    boolean contains = false;
    for(Person ns: new ArrayList<>(highestRecords)) {
        if(s.Id().compareTo(ns.Id()) == 0) {
            contains = true;
            if(s.getScore.compareTo(ns.getScore()) > 0     
    && s.optionalId().compareTo(ns.optionalId()) < 0) {

                highestRecords.remove(ns);
                highestRecords.add(s)       
            }
        }
    }
    if(contains == false) {
        highestRecords.add(s);
    }
}else {
    highestRecords.add(s);
}
  }
}

0 Ответов