首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Collectors.groupingBy给予java.lang.ArrayIndexOutOfBoundsException

Collectors.groupingBy给予java.lang.ArrayIndexOutOfBoundsException
EN

Stack Overflow用户
提问于 2021-01-04 18:27:10
回答 1查看 113关注 0票数 0

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

基于实体名称,管辖权,来源组的价值,并存储在一个清单中,如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州

代码语言:javascript
复制
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);

我得到了

代码语言:javascript
复制
 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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-04 19:19:17

如果您期望在被':'拆分后恰好有3个元素,您可能希望在收集之前使用filter

代码语言:javascript
复制
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]

代码语言:javascript
复制
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())
        )
    );
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65567880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档