Java 在列表中对不同的数组元素进行流式处理

Java 在列表中对不同的数组元素进行流式处理,java,arrays,list,java-stream,distinct-values,Java,Arrays,List,Java Stream,Distinct Values,我有一个String[6]s的列表。我正在尝试构建一个列表,其中包含每个索引处唯一的字符串元素 出于某种原因,我经常遇到这个问题,搜索看看答案是否存在,进行了大量实验,最终建立了一个不使用流的工作方法,但占用了大约20行 举例说明: //Sample items: String[] items = "AD", "AR", "BC", "DA", "RA", "DD"; // String[] items2 = "AE", "AZ", "BU", "DI", "RE",

我有一个
String[6]
s的
列表。我正在尝试构建一个
列表
,其中包含每个索引处唯一的
字符串
元素

出于某种原因,我经常遇到这个问题,搜索看看答案是否存在,进行了大量实验,最终建立了一个不使用流的工作方法,但占用了大约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;
我在
.stream()
方面做得很好,但在某些复合数据类型(数组列表[])上,我似乎找不到正确的方法和解决方案


非常感谢您的帮助。

如果我理解正确,您实际上需要一个
列表
,该列表与您的3个
列表
大小相同,并且包含每个索引;此索引的不同元素

所以

List itemLists=new ArrayList();
add(新字符串[]{“AD”、“AR”、“BC”、“DA”、“RA”、“DD”});
添加(新字符串[]{“AE”、“AZ”、“BU”、“DI”、“RE”、“DP”});
添加(新字符串[]{“AD”、“AO”、“BU”、“DZ”、“RW”、“DP”});
列出区别=
IntStream.range(0,itemLists.get(0).length)
.mapToObj(i->itemLists.stream().map(itemArray->itemArray[i]).distinct().collect(toList())
.collect(toList());
System.out.println(“differentitems=“+differentitems”);

不清楚!
列表
基本上是一个二维数据结构。
列表[]
是一种三维数据结构。我不明白你想如何转换你的源代码列表。除此之外,你的代码尝试在哪里?啊,我想我复制错了:列表[]。我有没有stream的工作解决方案,但我认为stream()会更简洁。我整晚都在用这个做一个项目,所以我很累。如果你认为这个问题无效,我就把它记下来。使用.stream()的尝试包括.foreach(),.distinct(),但我不确定如何将.distinct()应用于原始列表中的字符串[]。我想是的,您描述的列表就可以了。在这里,我们将详细研究流中的.mapToObj()、.range()方法和stream()方法。这是打开了一些非常令人兴奋的门!但我得到的是,“无法推断mapToObj(intFunction)的类型参数
//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
    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);