Условная проверка потока Java 8 - PullRequest
2 голосов
/ 08 мая 2019
List<Map<String,Object>> list= new List<Map<String,Object>>();
System.out.println(list.stream().mapToInt(i ->  (Integer)i.get("amount")).sum());

У меня есть список предметов, как указано выше. Я пытаюсь распечатать сумму, которая будет ключом на карте. Это отлично работает. Но мне просто интересно, есть ли способ, если я могу просто проверить, содержит ли карта этот ключ в этом однострочном коде. Любой способ включить условие if map.containsKey здесь?

Ответы [ 3 ]

4 голосов
/ 08 мая 2019

Возможно, вы ищете getOrDefault, который будет использоваться как:

list.stream().mapToInt(i ->  (Integer)i.getOrDefault("amount", 0)).sum());

, который, когда key не существует, возвращает 0 в качестве значения по умолчанию.

3 голосов
/ 08 мая 2019

Вы можете использовать Stream.filter, чтобы получить только карты с ключом amount для суммирования.

System.out.println(list.stream().filter(m -> m.containsKey("amount")).mapToInt(i ->  (Integer)i.get("amount")).sum());
0 голосов
/ 08 мая 2019

вы можете использовать Stream::filter в сочетании с Objects::nonNull

list.stream()
    .map(map -> map.get("amount"))
    .filter(Objects::nonNull)
    .mapToInt(Integer.class::cast)
    .sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...