web-dev-qa-db-ja.com

Java 8、2つのマップを比較して結果を返す

2つのマップを比較していますJava 8つの機能を使用しており、条件に基づいて結果を返したいと思っています。。forEachを使用すると、コンパイル時エラーが表示されます基本的に、戻り値はループからではなく、ラムダ式から戻ります。ラムダを囲むループから戻るにはどうすればよいですか?
2つのマップオブジェクトの等価性を比較していないことに注意してください

nMap.forEach((k,v) -> {
    if (!mMap.containsKey(k) || mMap.get(k) < v) {
        return -1;
    }
});
8
Abhinav Tyagi

Streamの代わりにentrySet()およびanyMatchforEachを使用します。

boolean found = 
    nMap.entrySet()
        .stream()
        .anyMatch(e -> !mMap.containsKey(e.getKey()) || mMap.get(e.getKey()) < e.getValue());
if (found)
    return -1;
8
Eran

Streamを使用する別のアプローチは、指定された条件に従ってエントリをフィルタリングします。ストリーミングの結果はOptionalで、検出されたEntryが含まれる場合があります。

if (nMap.entrySet().stream()
        .filter(e -> !mMap.containsKey(e.getKey()) || mMap.get(e.getKey()) < e.getValue())
        .findAny()
        .isPresent()) {
    return -1;
}
2
LuCio