私は、文字列値にマップする特定のキーを持つマップのリストを持っています。 List<Map<String,String>> aMapList;
Javaマップのラムダ例外
目的よう
何か:マップのリスト経由でストリーミングし、すべてのマップで、単一のキーの値を収集。私はこれをやっている方法
- >
key = "somekey";
aMapList.stream().map(a -> a.get(key)).collect(Collectors.averagingInt());
問題: 私は例外によるそのようなキーが存在しない場合 a.get(キー)を取得!これを平均化するとnullが返されるためです。ラムダがそのような地図を無視して移動するかどうかを確認する方法
a -> a.contains(key)
にフィルタを追加してから、処理を進めることができます。 編集:フィルタを追加したり、複数の条件を1つのフィルタに単純にチェックしたりすることもできます。 考えられる解決策:
aMapList.stream().filter(a -> a.contains(key)).
map(a -> a.get(key)).collect(Collectors.averagingInt());
これをきれいに行うことができますか? 操作を停止する代わりに、単に操作をスキップしますか? 例外やヌルをスキップするための一般的な方法がいくつかあります。 たとえば、私たちはラムダを広げてtry-catchブロックを置くことができますが、何かを返す必要があります。もし私が "continue"と同等のことをしたいのであれば、どうしたらいいですか?
例:上記はまだだけではなく、スキップのは、nullを返します>
(a -> {try{return a.get(key)}
catch(Exception e){return null} }).
-
(a -> {return a.get(key) }).
はに拡張することができます。
私は2つのオプションを与えるための最良の答えを選択していますが、私はそれらのどれもきれいではありません。フィルタを連鎖させることがこれに対する解決策であると思われる。
なぜ例外が発生しますか? nullにならないといけませんか? –
私は1つの解決策を知っています。私はこれをもっと短時間でやり遂げることができるかどうか尋ねているだけです。フィルタが多すぎると醜く見えて混乱させます。 – Pranay
@ cricket_007、将来の操作で例外がスローされるためです。私はnullを取得しますが、それは後で中断して例外をスローします。 – Pranay