Параллельный поток Java с вложенным HashMap - PullRequest
0 голосов
/ 25 октября 2018

Учитывая вложенную HashMap HashMap<Integer,HashMap<Integer,BigDecimal>> можно ли обнулить внутренние значения HashMap с параллельными потоками с приемлемыми побочными эффектами и с соблюдением правил невмешательства?

Например, учитывая HashMap:

HashMap<Integer,HashMap<Integer,BigDecimal>> myMap = null;

является окончательным forEach в:

myMap.entrySet().parallelStream().forEach(e -> {
            e.getValue().entrySet().parallelStream().forEach(e1 -> {
                e1.setValue(new BigDecimal(0));
                });
        });

приемлемых побочных эффектах и ​​соблюдении правил невмешательства?

1 Ответ

0 голосов
/ 25 октября 2018

... можно ли обнулить внутренние значения HashMap с параллельными потоками ...

Кажется, это работает, однако HashMap не является поточно-ориентированной реализациейпоэтому я не рекомендую вам использовать этот способ.

... с приемлемыми побочными эффектами и соблюдением правил невмешательства?

Использование Stream::for имеет побочные эффекты, так как оно меняет источникПоток.Я рекомендую вам использовать Stream::map и затем собрать структуру обратно в Map, используя один parrallelStream:

Map<Integer, Map<Integer,BigDecimal>> myMap2 = myMap.entrySet().parallelStream()
    .map(e -> new AbstractMap.SimpleEntry<>(
        e.getKey(), 
        e.getValue().entrySet().stream()
                               .collect(Collectors.toMap(Entry::getKey, i -> BigDecimal.ZERO))))
    .collect(Collectors.toMap(Entry::getKey, Entry::getValue));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...