在List中流式传输不同的Array元素

问题描述 投票:1回答:1

我有ListString[6]s。我正在尝试建立一个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包含样本Items,那么.stream()如何将它们放在distinctItems中? distinctItems应如下所示:

//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()上相当不错,但在某些复合数据类型(数组列表[])上,我似乎找不到合适的方法和解决方案。

任何帮助非常感谢。

java arrays list java-stream distinct-values
1个回答
1
投票

如果我理解正确,你实际上想要一个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);
© www.soinside.com 2019 - 2024. All rights reserved.