我有一个地图列表与映射到字符串值的某些键。爪哇地图Lambda异常
喜欢的东西List<Map<String,String>> aMapList;
目的:流过名单的地图,并收集所有地图一个键的值。
我如何做这个 - >
key = "somekey";
aMapList.stream().map(a -> a.get(key)).collect(Collectors.averagingInt());
问题: 我得到异常由于 a.get(key)如果不存在这样的关键!因为平均值会给出一个空值。我如何检查或使lambda忽略任何这样的地图并继续前进。
我知道我可以在a -> a.contains(key)
上添加一个过滤器,然后继续。 编辑:我还可以在一个过滤器上添加更多过滤器或简单检查多个条件。 可能的解决方案:
aMapList.stream().filter(a -> a.contains(key)).
map(a -> a.get(key)).collect(Collectors.averagingInt());
可以这样进行更漂亮? 而不是停止操作,只需跳过它们? 是否有更通用的方法来跳过例外或空值。 例如。我们可以扩展lambda并放置一个try-catch块,但是我仍然需要返回一些东西,如果我希望做一个“继续”的等价物。
例如,
(a -> {return a.get(key) }).
可扩展到 - >
(a -> {try{return a.get(key)}
catch(Exception e){return null} }).
以上仍然会返回一个空的,而不是仅仅跳过。
我选择了给出两个选项的最佳答案,但我没有发现它们中的任何一个更漂亮。链式过滤器似乎是解决这个问题的方法。
你为什么会遇到异常?你不应该得到空吗? –
我知道一个解决方案。我只是问我能否以更短的方式做到这一点。太多的滤镜看起来很丑,让人感到困惑。 – Pranay
@ cricket_007,因为未来的操作会抛出异常。我会得到null,但随后它会中断并抛出异常。 – Pranay