У меня есть первый метод, задача которого состоит в том, чтобы в основном вычислять суммы записей в списке атрибутов на основе условий как.Я пытаюсь добиться этого с помощью параллельных потоков (скажем, список огромен).Хотя здесь я использую атомарный double для обработки состояния гонки, но я не уверен, что это лучший способ сделать это, поскольку Java8 имеет много встроенных функций.
Код:
public double getSum(List<SomeObject> list, boolean flag1, boolean flag2){
AtomicDouble sum = new AtomicDouble();
list.parallelStream().forEach(item -> {
if(flag1){
sum.addAndGet(flag2 ? item.getFirstData() : item.getSecondData());
} else {
sum.addAndGet(flag2 ? item.getThirdData() :item.getFourthData());
}
});
return sum.doubleValue();
}
Для второго метода, как мы это делаем:
enter code herepublic double getSum(Set<String> keys, HashMap<String, SomeObject> map, boolean flag1, boolean flag2){
AtomicDouble sum = new AtomicDouble();
keys.parallelStream().forEach(key -> {
SomeObject item = map.get(key);
if(flag1){
sum.addAndGet(flag2 ? item.getFirstData() : item.getSecondData());
} else {
sum.addAndGet(flag2 ? item.getThirdData() :item.getFourthData());
}
});
return sum.doubleValue();
}