Java 8流条件检查

时间:2019-05-08 03:48:39

标签: java java-8 hashmap

List<Map<String,Object>> list= new List<Map<String,Object>>();
System.out.println(list.stream().mapToInt(i ->  (Integer)i.get("amount")).sum());

我有一个类似上面的物品清单。我正在尝试打印金额的总和,这将是地图内的关键。这很好。但是我只是想知道是否有办法可以检查地图是否在这一行代码中包含该键。有什么办法在此处包含map.containsKey的if条件吗?

3 个答案:

答案 0 :(得分:4)

您可能正在寻找getOrDefault用作:

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

如果key不存在,则会返回0作为默认值。

答案 1 :(得分:3)

您可以使用Stream.filter仅获取具有键amount进行求和的地图。

System.out.println(list.stream().filter(m -> m.containsKey("amount")).mapToInt(i ->  (Integer)i.get("amount")).sum());

答案 2 :(得分:0)

您可以将Stream::filterObjects::nonNull组合使用

list.stream()
    .map(map -> map.get("amount"))
    .filter(Objects::nonNull)
    .mapToInt(Integer.class::cast)
    .sum()