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条件吗?
答案 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::filter
与Objects::nonNull
组合使用
list.stream()
.map(map -> map.get("amount"))
.filter(Objects::nonNull)
.mapToInt(Integer.class::cast)
.sum()