我想按集合的多个字段进行分组。

基于实体名称,管辖权,来源组的价值,并存储在一个清单中,如A太平洋贸易站和徽标展览,美国,夏威夷商业Express=Alternative_names:A太平洋贸易站和徽标展览(&设计海洋WITHSUN,帆船,云彩,2个岛屿,旗帜在一个圆形带,2棕榈树,2朵花在一棵树的底部),Identifiers.Other_company_id_number:25510 G5,Identifiers.Name:A Identifiers.Name:A太平洋贸易站和徽标展览,现状:Inv。取消,Address.Full_address:140 N KALAHEO AVE STE BKAILUA,夏威夷96734,美国,Address.country:United州
Map<List<String>, List<String>> map = Files.lines(Path.of(file)).skip(1).map(s -> s.split(":"))
.limit(10).collect(Collectors.groupingBy(arr -> Arrays.asList(arr[0], arr[2]),
Collectors.mapping(arr -> arr[1], Collectors.toList())));
System.out.println(map);我得到了
java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 1
Map<List<String>, List<String>> map5 = Files.lines(Path.of(file), StandardCharsets.ISO_8859_1)
.skip(1).map(s -> s.split(",")).filter(arr -> arr.length > 1).collect(
Collectors.groupingBy(arr -> Arrays.asList(arr[0], arr.length > 2 ? arr[3] : "EMPTY"),
Collectors.mapping(strings -> String.join(":", strings),
Collectors.toList())));
System.out.println("map values are : " + map5);发布于 2021-01-04 19:19:17
如果您期望在被':'拆分后恰好有3个元素,您可能希望在收集之前使用filter:
Map<List<String>, List<String>> map = Files
.lines(Path.of(file))
.skip(1)
.map(s -> s.split(":"))
.limit(10)
.filter(arr -> arr.length > 2) // make sure array has at least 3 elements
.collect(
Collectors.groupingBy(
arr -> Arrays.asList(arr[0], arr[2]),
Collectors.mapping(arr -> arr[1], Collectors.toList())
)
);或者,您可能希望处理两个元素的数组,并使用一些占位符而不是arr[2]。
Map<List<String>, List<String>> map = Files
.lines(Path.of(file))
.skip(1)
.map(s -> s.split(":"))
.limit(10)
.filter(arr -> arr.length > 1) // make sure array has at least 2 elements
.collect(
Collectors.groupingBy(
arr -> Arrays.asList(arr[0], arr.length > 2 ? arr[2] : "EMPTY"), // use placeholder
Collectors.mapping(arr -> arr[1], Collectors.toList())
)
);https://stackoverflow.com/questions/65567880
复制相似问题