Есть ли способ конвертировать steam.map () индивидуальный вывод в список - PullRequest
1 голос
/ 29 октября 2019

У меня есть список, который содержит значения, разделенные запятыми, как отдельный элемент. как:

   List<String> personOutputList=new ArrayList<>();
   personOutputList.add("nexus 9k, nexus 9000,n9k");
   personOutputList.add( "nexus 7k, nexus 7000,n7k");
   personOutputList.add("nexus 9000");
   personOutputList.add("utility issue");
   personOutputList.add("network availability issue");
   personOutputList.add("nexus 7000");
   personOutputList.add("nexus 9k issue");

Возможно ли преобразовать разделенные запятыми элементы в часть отдельного списка элементов, например:

[nexus 9k, nexus 9000, n9k, nexus 7k, nexus 7000, n7k, nexus 9000, проблема утилит, проблема доступности сети, nexus 7000, проблема nexus 9k]

outputSet=outputSet.stream()
  .map(item->item.split(","))
  .collect(Collectors.toCollection(HashSet::new));

Но он возвращает массив строк [], я хочу быть элементом списка

[nexus 9k, nexus 9000, n9k, nexus 7k, nexus 7000, n7k, nexus 9000, проблема с утилитами, проблема доступности сети, nexus 7000, проблема nexus 9k]

Мне нужен вывод, подобный этому: Набор содержит: [nexus 7000, nexus 7k, nexus 7000, n7k, nexus 9k, n9k, nexus 9000, проблема nexus 9k, проблема с утилитой, проблема доступности сети]

Не так:Набор содержит что? : [[nexus 7k, nexus 7000, n7k], [nexus 9k, nexus 9000, n9k]]

1 Ответ

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

Ваш шаг .map(item->item.split(",")) преобразует Stream<String> в Stream<String[]>. Поскольку вы отображаете каждый элемент на несколько элементов, вы должны использовать flatMap, чтобы получить сумму Stream<String> всех этих элементов, которая впоследствии может быть собрана в Set.

Похоже, что выхотите Set всех уникальных элементов после разделения запятой String s:

Set<String> outputSet = 
    personOutputList.stream()
                    .flatMap(s -> Arrays.stream(s.split(","))
                    .collect(Collectors.toSet());

Или, если хотите убедиться, что вы получите HashSet:

HashSet<String> outputSet = 
    personOutputList.stream()
                    .flatMap(s -> Arrays.stream(s.split(","))
                    .collect(Collectors.toCollection(HashSet::new));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...