2017-01-11 5 views
0

Я хочу проверить, находится ли элемент «Item Two» в значениях MultiMap, получить индекс этого элемента, ниже - мой код.Как получить индекс элемента в значение 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")+")"); 
     } 
    }  
} 

И Выход:

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

Не могли бы вы помочь, как я не могу использовать что-то другое, чем Multimap

+2

См 'Map.containsValue (Object) ' – Aaron

+0

Аарон, не могли бы вы рассказать о том, где использовать карту. – black

+0

MultiMap расширяет карту, поэтому вы можете использовать' mhm.containsValue (Object) ' – Aaron

ответ

1

Прежде всего, 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)); 

Update: Это работает для меня:

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 

Update 2 Проверяется "Пункт Четыре" во всех ключей и возвращает истину/ложь для каждого ключа

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