2017-04-11 1 views
0

私はHashMapを持っています。私は私の個々のarraylist(nodeList)の値が私のHashMapの値の中に含まれているかどうかをチェックしたいと思います。リストの結果を特定の文字列のHashMap値として確認する方法

getNodes()はリストを返します<>出力:[要素N847744431({})、リストを返します。要素N847744763({})]

public class RoadNetwork{ 

    public void checkContent(){ 
    for(int i =0; i < nodeList.size(); i++){ 
      /* Does node(i) belong in the valueList of Way? */ 
     Set<Map.Entry<String, Element>> entrySet = wayList.entrySet(); 
      for (Map.Entry entry : entrySet){ 
       Way w1 = (Way) wayList.get(entry.getKey()); 
       //Check if Way contains node(i) 
       if(w1.getNodes().contains(nodeList.get(i))){ 
        System.out.println("Found something"); 
       } 
      } 
     } 
    } 
} 

public class Way{ 

    public List<Node> getNodes(){ 
     return nodes; 
    } 
} 

私はこの問題を回避するために何を行うことができます、しかし私は、.contains()メソッドは、この場合には動作していない、私のハッシュマップ内の特定の値をチェックしたいと思います。

+0

スニペットではなく、[mcve]を入力してください(可能な限りフォーマットしてください)。 'HashMap'で* value *を検索すると、' HashMap'のポイントの多くが無効になります。*キー*ルックアップに最適化されています。 –

+0

質問はありません。 – RobCo

答えて

0

あなたの例は不明です。質問は、「どのように複数の値のうち値がHashMapの範囲内にあるかどうかをチェックする」、ここに答えます:

// to check if at least one element of 'list' is present in 'map' 
if(list.stream().filter(l -> map.containsKey(l)).collect(Collectors.toSet()).size() > 0) { 
    // do stuff 
} 

説明:私はJava8のストリームAPIを使用してい

  • list.stream()はリストの要素からストリームを作成するので、いくつかのラムダ関数を各要素(関数プログラミング構造)に適用できます。
  • フィルタ(l - > map.containsKey(l))関数は、リストのどの要素がマップに存在するかをチェックします。フィルタ関数の出力は、リストとマップの両方に存在する要素の別のストリームになります。
  • Collectors.toSet()関数は、このストリームをSetに変換します。これはListでも他のコレクションでもかまいません。
  • size()関数は、結果セットが空であるかどうかをチェックするだけです。空であれば、リストと地図の両方で要素が共通していません。リストの少なくとも1つの要素がマップに存在します。
+0

私の質問には感謝しています。しかし、if文がどのように機能するか説明してください。 – AnthonyJ

+0

ステートメントは自明ですが、説明が追加されました。 – iavanish

関連する問題