2017-01-26 4 views
0

Listと比較してListにないMapから値を取得する必要があるエントリ。 Javaで地図を反復する

for (Map.Entry<String, Object> entry : itemObj.entrySet()) 
    { 
     System.out.println(entry.getKey()); 
     for (ItemProcessVO processVO : itemDetails2){ 
      if (entry.getKey().equalsIgnoreCase(processVO.getAccount())){ 
       String account = processVO.getAccount(); 
       lstAccVO.add(account); 
      } 
     } 

    } 

この

はentry.getKeyの地図を()itemDetail2のみ5 elements.Iは、比較した後だけ不足しているアカウントを表示する必要がありながら、6つの値を持っている持っている私はused.Iを持っているコードです。

+0

マップに含まれていてもリストにないキーを返すだけでいいですか、それともあなたがやりたいことをやりたいのですか? –

+0

@OP別の答えが追加されました。それが役に立ったら教えてください –

+0

はいマイケル・リッター私はキーが地図上にありますが、リストにはないことを返す必要があります。 – user1669692

答えて

0

以下のコードはすべきことです。これは、大文字小文字を区別しない比較して、最後にキーを残りのプリントを使用して、より多くの説明がコメントである:

public static void main(String[] args) throws IOException { 
    Map<String, Object> itemObj = new HashMap<>(); //Your Map 
    List<ItemProcessVO> itemDetails2 = new ArrayList<>();// Your list 

    //First, get all the keys of the map 
    Set<String> keys = new HashSet<>(itemObj.keySet()); 

    //Now, iterate through list and remove the matching items 
    for(ItemProcessVO processVO : itemDetails2){ 
     String key = pop(keys, processVO.getAccount()); 
     //If key is not null then remove it 
     if(null != key){ 
      keys.remove(key); 
     } 
    } 

    //Now, iterate through remaining keys and print the values 
    for(String key : keys){ 
     System.out.println("Missing value " + itemObj.get(key)); 
    } 
} 

private static String pop(Set<String> set, String key){ 
    if(null == set){ 
     return null; 
    }else{ 
     for(String element : set){ 
      if(element.equalsIgnoreCase(key)){ 
       return element; 
      } 
     } 
    } 
} 
+0

ソリューションに感謝します。しかし、それは動作しませんでした。私はpopメソッド\tプライベート静的文字列のポップ(セット、文字列のキーを設定します){ \t \t(ヌル==セット)であれば、{ \t \tリターンヌルを変更する必要があり、 \t \t \t}他{ \t \t \tイテレータ ITR = set.iterator()。 \t \t \t一方(itr.hasNext()){ \t \t \t \tのSystem.out.println(itr.next())。 \t \t \t \t文字列next = itr.next(); \t \t if(next.equalsIgnoreCase(key)){ \t \t return next; \t \t} \t \t \t \t} \t \t} \t \tリターンキー。 \t}。文字列next = itr.next(); java.util.NoSuchElementException – user1669692

+0

私は変更を加えました。今すぐ試してみてください。 –

0

単にそのローカル変数に占める店舗あなたのif節にelse -statementを追加します。その後、あなたのforループの後、あなたはそれで何でもすることができます。

ヒント:Map#entrySet()の代わりにMap#keySet()のループを使用して、そのようにエントリをバイパスすることができます。

0

提供された例では、鍵をアカウントと比較しましたが、else-ステートメントを使用してmissingAccountを見つけて、このループの後に反復処理します。