2017-07-10 9 views
-2

を持つ2つのマップJavaのラムダ式ストリームと同じキーと異なるオブジェクトのリスト

public class B { 

private C c; 

} 

は、私は同じMAP2のキーとA from map1 =持つすべてのエントリを除外するMAP1でフィルタしますとB.C in map1 =

C in map2だから、結果は次のようになります。これはどのように

Map<A, List<B>> map1 = new HashMap<>(); 
+5

これまでに何を試みましたか? – Flown

+1

あなたは入力と予想される出力の例を挙げることができますか? –

+5

願いの声明は問題ではありません。あなたの質問を編集して、(a)入力例と期待される出力、(b)あなた自身の試みの解決、(c)あなたが立ち往生した場所の説明など、スタックトレース間違った出力 - 間違った出力。 – RealSkeptic

答えて

1

Collection#removeIfを使用してAのすべてのエントリをmap1から削除します。がBの場合、エントリにmap2が含まれています。代わりにStream#filterを使用して

map1.entrySet().removeIf(entry -> entry.getValue().stream().anyMatch(
     b -> map2.getOrDefault(entry.getKey(), emptyList()).contains(b.c) 
)); 

OR

Map<A, List<B>> result = map1.entrySet().stream() 
    .filter(entry -> entry.getValue().stream().noneMatch(
      b -> map2.getOrDefault(entry.getKey(), emptyList()).contains(b.c) 
    )) 
    .collect(toMap(Entry::getKey, Entry::getValue)); 
+0

ストリーム#フィルタを使用すると問題はありません。あなたの助けをありがとう – Mohamed

+0

@モハメド全くありません。 –

関連する問題