文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java 对List集合中元素对象按字段分组,并收集指定字段的值

2023-09-04 07:27

关注

一、实现:对已有对象集合List ,需要获取Persion对象的字段 name分组, 并对年龄age字段值做收集

二、字段分组收集方法

 注:由于实际业务只有String类型跟数字类型,所以只对String跟Object两种类型判空

        public static  Map> groupAndCollectionField(List list, Function groupFunction, Function getFiledFunction) {        if (Objects.isNull(list)) {            return new HashMap<>();        }        //按寄收类型分组, 并收集区号(机场)        Map> setMap = list.stream().filter(r-> {                    K groupValue = groupFunction.apply(r);                    V filedValue = getFiledFunction.apply(r);                    //分组判空                    boolean groupNull = Objects.isNull(groupValue);                    if (!groupNull && groupValue instanceof String) {                        groupNull = ((String) groupValue).length() == 0;                    }                    //字段判空                    boolean filedNull = Objects.isNull(filedValue);                    if (filedValue instanceof String) {                        filedNull = ((String) filedValue).length() == 0;                    }                    //分组非空 and 字段非空 返回true; 否则返回false                    return !groupNull && !filedNull;                })                .collect(Collectors.groupingBy(groupFunction, Collectors.mapping(getFiledFunction, Collectors.toSet())));        return setMap;    }

三、测试代码

        //场景1        System.out.println("场景1");        List persionList = new ArrayList<>();        persionList.add(new Persion(1, "李二", null));        persionList.add(new Persion(2, null, 30));        persionList.add(new Persion(3, "王五", 15));        persionList.add(new Persion(4, "陈十一", 11));        //分组并收集字段        Map> setMap = Main.groupAndCollectionField(persionList, Persion::getName, Persion::getAge);        //遍历        setMap.entrySet().stream().forEach(r-> System.out.println(String.format("name:%s; age:%s",r.getKey(),r.getValue())));        System.out.println("");                //场景2        System.out.println("场景2");        persionList = new ArrayList<>();        persionList.add(new Persion(1, "李二", 22));        persionList.add(new Persion(2, "李二", 30));        persionList.add(new Persion(3, "王五", 15));        persionList.add(new Persion(4, "陈十一", 11));        //分组并收集字段        setMap = Main.groupAndCollectionField(persionList, Persion::getName, Persion::getAge);        //遍历        setMap.entrySet().stream().forEach(r-> System.out.println(String.format("name:%s; age:%s",r.getKey(),r.getValue())));    }

四、结果

来源地址:https://blog.csdn.net/tingyesiyu/article/details/130803702

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯