У меня есть этот код:
ComparisonResults comparisonResults = requestsList
.stream()
.map(item -> getResponse(item))
.map(item -> compareToBl(item))
.reduce(new ComparisonResults(), (result1, result2) ->
{
result1.addSingleResult(result2);
// return result1;
return new ComparisonResults(result1);
});
и этот код б:
ComparisonResults comparisonResults = requestsList
.parallelStream()
.map(item -> getResponse(item))
.map(item -> compareToBl(item))
.reduce(new ComparisonResults(), (result1, result2) ->
{
result1.addSingleResult(result2);
// return result1;
return new ComparisonResults(result1);
});
Все, что я делаю, это создаю объекты ответа, затем преобразовываю их в объекты comaprisonResult и сокращаю их до одного объекта comaprisonResult.
код a
показывает член класса int comparisonResults.num_of_sub_responses==5
, который является правильным
code b
показывает член класса int comparisonResults.num_of_sub_responses==10
, который удваивает правильный результат.
java 8 reduce должен быть потокобезопасным, верно?
я что-то пропустил?
getResponse
и compareToBl
являются потокобезопасными
ComparisonResult
. - person RealSkeptic   schedule 27.10.2015