2016-06-23 3 views
1

У меня есть заполненный хэш-файл в форме Hashmap<String , ArrayList<Double>>. Существует много случаев, когда значения (Arraylist) одинаковы. То, что я хочу сделать, это сделать, если значение такое же, две отдельные записи должны быть изменены на один с изменением ключа. Для например:Обработка повторяющихся значений в HashMaps

HashMap<String, ArrayList<Double>> map = new HashMap<>(); 
ArrayList<Double> arr = new ArrayList<>(); 
arr.add(1); 
arr.add(2) 
map.put("a",arr); 
map.put("b",arr); 
map.put("c",arr); 

Это должно привести к HashMap с одной записью:

{a, b , c=[1,2]} 

Я попытался решить эту проблему в течение нескольких часов, но я до сих пор не в состоянии сделать это. Миллион заблаговременно.

+0

@lucasvw Я хочу удалить несколько значений не несколько ключей –

+1

java.util.HashMaps действительно не работают. HashMap - это набор пар ключей, значений ** **, он не позволяет использовать несколько ключей в одной записи. – lucasvw

+0

Но вы говорите, что хотите объединить клавиши с одним и тем же значением в один ключ, верно? – lucasvw

ответ

0

Создание пользовательских HashMap путем переопределения put() должно работать, но по эффективности оно не очень эффективно.

Что-то вроде этого:

public class CustomMap extends HashMap<String, ArrayList<Double>> { 
    @Override 
    public ArrayList<Double> put(String key, ArrayList<Double> value) { 
     for (Entry<String, ArrayList<Double>> entry : entrySet()) { 
      if (entry.getValue().equals(value)) { 
       String oldKey = entry.getKey(); 
       remove(oldKey); 
       String newKey = oldKey + ", " + key; 
       return super.put(newKey, value); 
      } 
     } 
     return super.put(key, value); 
    } 
} 

Чтобы использовать его, просто замените следующее:

HashMap<String, ArrayList<Double>> map = new HashMap<>(); 

С:

CustomMap map = new CustomMap(); 
0

Карты связывают ключи со значениями. Поэтому, даже если значения одинаковы, вы не можете комбинировать эти записи, потому что ключи разные

+0

Не могу удалить старые записи, а затем добавить новый с обновленным ключом –

+0

Вы могли бы, но, как правило, плохая идея использовать Коллекции в качестве ключа. См. Http://stackoverflow.com/questions/2393296/how-to-use-sets-as-keys-in-java-maps – lucasvw

+0

@lucasvw Буду признателен, если вы могли бы предложить мне указать, как я могу достичь вышеуказанного , Я не возражаю изменить тип значения –

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