Поток отдельных элементов массива в списке - PullRequest
1 голос
/ 03 апреля 2019

У меня есть List из String[6] с.Я пытаюсь создать List<List>, который содержит уникальные элементы String в каждом индексе.

По какой-то причине я часто сталкиваюсь с этой проблемой, ищите, чтобы найти ответы, много экспериментируйте,и заканчиваем тем, что строим рабочий метод, который не использует поток, но занимает как 20 строк.

Для пояснения, с примером:

//Sample items: String[] items = "AD", "AR", "BC", "DA", "RA", "DD";
//              String[] items2 = "AE", "AZ", "BU", "DI", "RE", "DP";
//              String[] items3 = "AD", "AO", "BU", "DZ", "RW", "DP";
List<String[]> itemsList;
List<String>[] distinctItems;

Если itemsList содержит образцы элементов, как .stream() может поместить их в DifferentItems ? differentItems должно выглядеть следующим образом:

//distinctItems[0].get(0) == "AD"
//distinctItems[0].get(1) == "AE"
//distinctItems[0].size() == 2         ; Has 2 unique elements in index 0

//distinctItems[1].get(0) == "AR"
//distinctItems[1].get(1) == "AZ"
//distinctItems[1].get(2) == "AO"
//distinctItems[1].size() == 3         ; Has 3 unique elements in index 1

У меня довольно хорошо получается .stream(), но на некоторых составных типах данных (List of Array []) я не могунайти правильные методы и решения.

Любая помощь с благодарностью.

1 Ответ

1 голос
/ 03 апреля 2019

Если я правильно понимаю, вы на самом деле хотите List<List<String>>, который имеет тот же размер, что и ваши 3 List<String[]>, и который содержит для каждого индекса;отдельные элементы для этого индекса.

Итак

    List<String[]> itemLists = new ArrayList<>();
    itemLists.add(new String[] { "AD", "AR", "BC", "DA", "RA", "DD" });
    itemLists.add(new String[] { "AE", "AZ", "BU", "DI", "RE", "DP" });
    itemLists.add(new String[] { "AD", "AO", "BU", "DZ", "RW", "DP" });

    List<List<String>> distinctItems =
        IntStream.range(0, itemLists.get(0).length)
                 .mapToObj(i -> itemLists.stream().map(itemArray -> itemArray[i]).distinct().collect(toList()))
                 .collect(toList());

    System.out.println("distinctItems = " + distinctItems);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...