我有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()
将其放入 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()
方面表现不错,但是在某些复合数据类型(Array []列表)上,我似乎找不到正确的方法和解决方案。
任何帮助都将不胜感激。
答案 0 :(得分: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);