2014-11-05 2 views
0

Например, карта {ключ: значение} как этототображение для ключей, имеющих то же значение Java

A : 1

B : 2

C : 3

D : 3

Как могу я отделить ключи от списков, таких как [A, B, C], [A, B, D] на основе значений на карте? Поскольку набор значений карты равен [1,2,3], так как клавиши для 3 - это C и D, тогда будет два списка отображения.

ArrayList<Object> item1 = new ArrayList<Object>(); 
ArrayList<Object> repeated = new ArrayList<Object>(); 
Set<Object> getKeys = map.keySet(); 
Collection<Object> getValues = map.values(); 
ArrayList<Object> keyArray = new ArrayList<Object>(getKeys); 
ArrayList<Object> valueArray = new ArrayList<Object>(getValues);  


for (int i=0 ; i < keyArray.size(); i++){ 
    int y = Collections.frequency(valueArray, valueArray.get(i)); 
    if (y == 1){ 
     item1.add(valueArray.get(i)); 
    }else{ 
     repeated.add(valueArray.get(i)); 
    } 
} 

ArrayList<ArrayList<Object>> possibleKeyCombination = new ArrayList<ArrayList<Object>>(); 
for (Object r : repeated){ 
    ArrayList<Object> table = new ArrayList<List<Object>>(item1); 
    table.add(r); 
    possibleKeyCombination.add(table); 
} 

Теперь, я могу решить этот конкретный вопрос. Однако, когда отображение становится сложным, мой код не будет работать. Например,

A : 1,3

B : 2

C : 3

D : 3

+0

Что вы получите от {A: 1, B: 1, C: 1, D: 1, E: 2, F: 2, G: 3, H: 3}? – immibis

+0

@ kk988 Я не понимаю, как это уникально? – zubergu

+0

@immibis полный уникальный список = 4 * 2 * 2 [AEG] [AFG] [AEH] [AFH] .... – kk988

ответ

0

Насколько я знаю, не существует предопределенный способ делать то, что вы хотите. Вы можете получить все значения, вызвав map.values ​​(), а затем вручную создайте список всех ключей, соответствующих значению. Все, что осталось после этого, вычисляет всю возможную комбинацию.

Смежные вопросы