Viamos
@Viamos
Человек, который любит пиццу

Ка лучше использовать parallelStream() в Java?

Хотел бы получить информацию о параллельных стримах. Если смотреть прям под мой кейс, то у меня есть списки в котором хранятся объекты с BigDecimal
Приведу один из примеров
private static BigDecimal findAvg(List<Record> records) {
        return BigDecimal.valueOf(records.stream()
                .map(Record::getWithdrawal)
                .reduce(BigDecimal.ZERO, BigDecimal::add)
                .doubleValue() / records.size());
    }

Или приведу пример с parallelStream()
var records = dayRecords.parallelStream()
                    .filter(r -> r.getDescription().equals(description))
                    .collect(Collectors.toList());

В этом случае бывает программа не может остановиться. Пока не разобрался почему. Цель этого кейса, это приток производительности и потребление памяти с малом количестве.

В общем какие Best Practice есть с parallelStream() и с чем его едят? Какие лучше Collections выбирать для них?
  • Вопрос задан
  • 122 просмотра
Решения вопроса 2
xez
@xez Куратор тега Java
TL Junior Roo
Бест-практиз - не использовать паралелСтрим:
https://dzone.com/articles/think-twice-using-java-8

Можно использовать StreamEx.
Ответ написан
Комментировать
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Не все коллекции поддерживают параллелизм стримов.

Какие BestPractices? Запускай анализ производительности под JMH и наблюдай. Не верь в рекламу.

Пример с подсчетом среднего значения в List (кстати какой это List? Какая implementation?) - очень софистичесчкий
и надуманный. Его любят преподаватели. Но в реальной жизни и в продуктовом коде тебе чаще придется вычислять среднее по ResultSet из JDBC или по какому-нибудь толстому JSON документу который льется из микросервиса.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы