2017-01-11 15 views
0

"Item Two"要素がその要素のMultiMap get indexの値に含まれているかどうかを確認したい、以下は自分のコードです。MultiMapの値で要素のインデックスを取得する方法

import java.util.ArrayList; 
import java.util.List; 
import java.util.Set; 

import org.apache.commons.collections.MultiMap; 
import org.apache.commons.collections.map.MultiValueMap; 

public class Test { 
    public static void main(String args[]) { 
     MultiMap mhm = new MultiValueMap(); 
     String key =""; 
     key = "Group One"; 
     mhm.put(key, "Item One"); 
     mhm.put(key, "Item Two"); 
     mhm.put(key, "Item Three"); 

     key = "Group Two"; 
     mhm.put(key, "Item Four"); 
     mhm.put(key, "Item Five"); 

     Set keys = mhm.keySet(); 
     for (Object k : keys) { 
      System.out.println("+k+“ : "+mhm.get(k)+")"); 
      List benefit = new ArrayList(); 
      benefit.add(mhm.get(k)); 
      System.out.println("+value at is+“ : "+benefit.contains("Item One")+")"); 
     } 
    }  
} 

、出力は次のとおりです。私はマルチマップ

以外のもの
+2

'Map.containsValue(Object)を参照してください。 ' – Aaron

+0

Aaron、あなたは詳細を教えてください、私はマップを使用する場所を得ませんでした – black

+0

MultiMapはマップを拡張するので、' mhm.containsValue(Object) 'を使用することができます – Aaron

答えて

1

まず第一に使用することはできませんよう

mhm-keys : [Item One, Item Two, Item Three] 
value at is : false 
mhm-keys : [Item Four, Item Five] 
value at is : false 

あなたは助けてもらえ、MultiValueMapは廃止され、代わりにMultiValuedMapを使用する必要があります。 https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/MultiValuedMap.html

MultiValuedMap<String, String> mhm = new ArrayListValuedHashMap<String, String>(); 

しかし、あなたは非推奨MultiValueMapを使用する場合、それは私で大丈夫です。両方の場合は、次のように使用することができます。

mhm.containsValue(value); 

あなたにも使用することができます。

List<String> itemsWithKey = mhm.get(key); 
System.out.println(itemsWithKey.contains(value)); 

アップデート: これは私の作品:

MultiMap mhm = new MultiValueMap(); 
String key =""; 
key = "Group One"; 
mhm.put(key, "Item One"); 
mhm.put(key, "Item Two"); 
mhm.put(key, "Item Three"); 

key = "Group Two"; 
mhm.put(key, "Item Four"); 
mhm.put(key, "Item Five"); 

System.out.println(mhm.containsValue("Item One")); 
System.out.println(mhm.containsValue("Item Nine")); 

これが返されます。

true 
false 

アップデート2 このチェック "アイテム4つの" すべてのキーで各キー

MultiMap mhm = new MultiValueMap(); 
String key =""; 
key = "Group One"; 
mhm.put(key, "Item One"); 
mhm.put(key, "Item Two"); 
mhm.put(key, "Item Three"); 

key = "Group Two"; 
mhm.put(key, "Item Four"); 
mhm.put(key, "Item Five"); 


Set<String> keys = mhm.keySet(); 

String itemToLookFor = "Item Four"; 

for(String k : keys) { 
    List<String> itemsWithKey = (List<String>) mhm.get(k); 
    boolean doesExists = itemsWithKey.contains(itemToLookFor); 
    System.out.println("does " + itemToLookFor + " exists for key " + k + ": " +doesExists); 
} 

ための真/偽を返す結果は次のとおりです。

does Item Four exists for key Group One: false 
does Item Four exists for key Group Two: true 
+0

これはうまくいかず、正しい値のためにfalseを返しました – black

+0

私の環境で私は更新された答えにあるものを使用します – JavaBoy

+0

これは、そのキーの特定の値セットではなく、すべての値を検索します。私はすべてのキーで "Item One"をチェックし、それぞれのtrue/falseを返すようにします – black

関連する問題