Например, карта {ключ: значение} как этототображение для ключей, имеющих то же значение 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
Что вы получите от {A: 1, B: 1, C: 1, D: 1, E: 2, F: 2, G: 3, H: 3}? – immibis
@ kk988 Я не понимаю, как это уникально? – zubergu
@immibis полный уникальный список = 4 * 2 * 2 [AEG] [AFG] [AEH] [AFH] .... – kk988