通过分组

时间:2019-01-25 17:07:02

标签: java

我想按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);
}
  }
}

1 个答案:

答案 0 :(得分:3)

请勿将其转换为流。

这里没有一个纯操作。有几个。

值得注意的是初始操作:

if(getNewPendingMatches.size() > 0) 

在第一次迭代中,这总是错误的,您总是要在其中添加一个元素。

在随后的迭代中,生命变得很奇怪,因为现在您正在尝试在元素上进行迭代时删除它们。流在迭代自身时不能从自身中删除值。它只会沿一个方向进行处理。

如所写,此代码不应转换为流。这样做将不会带来任何好处,如果这样做的话,将会极大地损害可读性。