Java 8 код для объединения списка строк без дубликатов - PullRequest
0 голосов
/ 04 октября 2019

У меня есть Hit класс и List<Hit>, который содержит что-то вроде этого:

{{id=1, list="EU"}, {id=2, list="EU,OF,UN"}}

Как я могу получить несколько составных списков без двойных вхождений?

Я пробовал что-токак это:

Set<String> sourceList = alertHit.stream()
                .map(Hit::getList)
                .collect(Collectors.toSet());

но я получаю "ЕС, ЕС, ОФ, ООН" в моем sourceList Set. Как я могу получить только «ЕС, ОФ, ООН» в моем Set? Спасибо!

1 Ответ

3 голосов
/ 04 октября 2019

Если Hit::getList возвращает String элементов, разделенных запятыми, вы должны разделить это String.

Это даст String[], который можно использовать для получения Stream<String>.

Наконец, вам нужно использовать flatMap вместо map, чтобы получить квартируStream из всех этих String с. Это Stream, который вы должны собрать в Set.

Set<String> sourceList = 
    alertHit.stream()
            .flatMap(h -> Arrays.stream(h.getList().split(",")))
            .collect(Collectors.toSet());
...