我想按ID来获得最高分数组,如果两个最高分数相同,那么我想根据最低的Optional ID来获得最高分数。我想在Java Stream中获得它。有没有有效的方法可以在Java流中重写此代码
示例:
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 :(得分:3)
请勿将其转换为流。
这里没有一个纯操作。有几个。
值得注意的是初始操作:
if(getNewPendingMatches.size() > 0)
在第一次迭代中,这总是错误的,您总是要在其中添加一个元素。
在随后的迭代中,生命变得很奇怪,因为现在您正在尝试在元素上进行迭代时删除它们。流在迭代自身时不能从自身中删除值。它只会沿一个方向进行处理。
如所写,此代码不应转换为流。这样做将不会带来任何好处,如果这样做的话,将会极大地损害可读性。