Как использовать потоковый API с HashMap - PullRequest
1 голос
/ 17 октября 2019

У меня есть приведенный ниже код, и я использую выражение lamda для установки пары ключ-значение hashMap в список Stats. Я новичок в потоковом API, и я хочу сделать это в потоковом API, может кто-нибудь помочь с этим. Спасибо.

    final List<Stats> values = new ArrayList<>();
        if (countMap != null) {
                    countMap.forEach((k, v) -> {
                        final Stats value = new Stats();
                        value.setType(k);
                        value.setCount(v);
                        final double percent = getPercentage(v, total.get());
                        value.setPercent(percent);
                        values.add(value);
                    });
                }

private double getPercentage(final double count, final double total) {
        final double percent = (count / (total * 1.0)) * 100;
        final BigDecimal bd = new BigDecimal(percent).setScale(2, RoundingMode.HALF_UP);
        return bd.doubleValue();
    }

Ответы [ 2 ]

3 голосов
/ 17 октября 2019

Вы можете упростить код с определенным конструктором всех аргументов, например:

final List<Stats> values = countMap.entrySet().stream()
        .map(e -> new Stats(e.getKey(), e.getValue(), getPercentage(e.getValue(), total.get())))
        .collect(Collectors.toList());

, где конструктор преобразуется в

new Stats(<type>, <count>, <percent>)

Примечание : Избегайте присвоения null значения Map, вместо этого инициализируйте его как пустое. Код с этой дополнительной проверкой будет выглядеть так:

final List<Stats> values = countMap != null ? countMap.entrySet().stream()
        .map(e -> new Stats(e.getKey(), e.getValue(), getPercentage(e.getValue(), total.get())))
        .collect(Collectors.toList()) : Collections.emptyList();
0 голосов
/ 17 октября 2019

вы можете получить entrySet и перебрать его, используя потоки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...