Как найти значения дубликатов на карте в потоке списка? - PullRequest
0 голосов
/ 02 октября 2018

Скажите, у меня есть этот список массивов:

 List<Map<String,String>> fileDataList= new ArrayList<>();
 fileDataList.stream().forEach(t->{
  //find duplicate map values
 });

Список может содержать повторяющиеся значения, подобные этим:

[
    {age:12,name:"john"}, 
    {age:11,name:"Mary"},
    {age:12,name:"john"}
]

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

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Вы можете преобразовать свой список, если Map в список EntrySet.

List<Map.Entry<String, String>> entries = fileDataList.stream()
                .flatMap(e -> e.entrySet().stream())
                .collect(toList());
0 голосов
/ 02 октября 2018

Хольгер в комментариях приводит точку, которую я упустил.Если ваш Map содержит только из этих name и age свойств, вы можете просто сделать:

fileDataList.stream()
            .distinct()
            .collect(Collectors.toList())

И этого будет достаточно.Если, с другой стороны, у вас есть больше свойств и что фильтровать только по некоторым из них, вы можете использовать эту утилиту :

fileDataList.stream()
            .filter(distinctByKey(x -> Arrays.asList(x.get("name"), x.get("age")))
            .collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...