2015-03-03 3 views
0

У меня есть LinkedHashMap, у которого есть некоторые дубликаты в выходе. Карта выглядит следующим образом:Фильтровать дубликаты типа Объект из списка в Java

Map<Object, List<Object>> myMap= new LinkedHashMap<Object, List<Object>>(); 

Когда я SYSOUT этой карты результат выглядит следующим образом:

Test.example.id = [Source.table1.id, Source.table2.id], 
Test.example.name = [Source.table1.name, Source.table1.name] 

Теперь я хотел бы, чтобы отфильтровать все дубликаты на записи, так что выход будет :

Test.example.id = [Source.table1.id, Source.table2.id], 
Test.example.name = [Source.table1.name] 

Может ли кто-нибудь мне помочь?

Спасибо!

Кевин

+0

Нужно ли, чтобы ваша Карта имела тип объекта? Похоже, это может быть String или некоторый числовой тип? – Nessuno

+3

Поместите его в 'Set'. – Pshemo

+0

Карта содержит объекты из пользовательского класса, который имеет несколько функций, которые я использую позже. – Kevin

ответ

1

С Java 8, вы можете сделать это следующим образом (она изменяет карту на месте):

myMap.replaceAll((k, v) -> v.stream().distinct().collect(toList())); 

В противном случае, вам придется перебрать значения вручную, поместите их в Set, чтобы получить отдельное свойство, а затем вернуть его обратно на карту.

for(Map.Entry<Object, List<Object>> entry : myMap.entrySet()) { 
    myMap.put(entry.getKey(), new ArrayList<>(new HashSet<>(entry.getValue()))); //you can use a new map if you want to keep the original one 
} 
+0

Я не могу использовать Java 8 в этом проекте. Я сейчас попробую ваше предложение, я вернусь к вам. Спасибо :) – Kevin

+0

Работает как шарм спасибо вам большое !! – Kevin

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