2つのマップを比較していますJava 8つの機能を使用しており、条件に基づいて結果を返したいと思っています。。forEachを使用すると、コンパイル時エラーが表示されます基本的に、戻り値はループからではなく、ラムダ式から戻ります。ラムダを囲むループから戻るにはどうすればよいですか?
2つのマップオブジェクトの等価性を比較していないことに注意してください
nMap.forEach((k,v) -> {
if (!mMap.containsKey(k) || mMap.get(k) < v) {
return -1;
}
});
Stream
の代わりにentrySet()
およびanyMatch
のforEach
を使用します。
boolean found =
nMap.entrySet()
.stream()
.anyMatch(e -> !mMap.containsKey(e.getKey()) || mMap.get(e.getKey()) < e.getValue());
if (found)
return -1;
Stream
を使用する別のアプローチは、指定された条件に従ってエントリをフィルタリングします。ストリーミングの結果はOptional
で、検出されたEntry
が含まれる場合があります。
if (nMap.entrySet().stream()
.filter(e -> !mMap.containsKey(e.getKey()) || mMap.get(e.getKey()) < e.getValue())
.findAny()
.isPresent()) {
return -1;
}