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

这篇具有很好参考价值的文章主要介绍了java 对List集合中元素对象按字段分组,并收集指定字段的值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

二、字段分组收集方法

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


    /**
     * 分组并字段收集
     *
     * @param list
     * @param groupFunction  类型现在只能为 String or Object
     * @param getFiledFunction
     * @return
     */
    public static <T, K, V> Map<K, Set<V>> groupAndCollectionField(List<T> list, Function<T, K> groupFunction, Function<T, V> getFiledFunction) {
        if (Objects.isNull(list)) {
            return new HashMap<>();
        }
        //按寄收类型分组, 并收集区号(机场)
        Map<K, Set<V>> 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<Persion> 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<String, Set<Integer>> 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())));
    }

四、结果

java获取list某个字段的值,java,stream,lambda文章来源地址https://www.toymoban.com/news/detail-605636.html

到了这里,关于java 对List集合中元素对象按字段分组,并收集指定字段的值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stream流的使用-获取list集合中对象的单个字段list集合,进行累加操作

    场景及代码案例源于实际项目 现存一list集合,其中保存了投资人的信息。 Person (name, age, money rateOfReturn) 其中的money表示投资人现有资产,rateOfReturn表示投资年回报率 需求: 1.计算投资人年龄之和; 2.根据现有资产及投资回报率,计算所有投资人一年后的资产总和; 实体

    2023年04月22日
    浏览(63)
  • java系列之list集合分组

    在Java编程中,List集合是一种常用的数据结构,用于存储一组元素。有时候,我们需要对List集合中的元素进行分组操作,即将相同属性或特征的元素归类到一组。这种分组操作在数据处理和分析中非常常见,能够帮助我们更好地组织和处理数据。 Java提供了多种实现List接口的

    2024年02月09日
    浏览(46)
  • Java 1.8 List集合排序、去重、分组、过滤、合并、截取操作

    1、正序 2、逆序 3、根据某个属性或多个属性排序 多个属性排序:需要添加排序条件就在后面添加.thenComparing(UserVO::getxxx),它是在上一个条件的基础上进行排序 1、去重 2、根据某个属性去重(它将该字段还进行排序了) 3、根据某个属性去重(这个方法没有排序) 4、对多个

    2024年02月01日
    浏览(69)
  • Java list集合中根据其中两个字段去重

    可以使用Java 8的Stream API和Collectors.toSet()方法来实现根据其中两个字段去重。 首先,使用Stream API将List转换为Stream,然后使用distinct()方法进行去重。distinct()方法默认使用元素的equals()和hashCode()方法进行去重。如果想要根据其中两个字段进行去重,需要重写equals()和hashCode()方法

    2024年02月16日
    浏览(59)
  • Java List对象集合转Json & Json转List对象集合

    使用了阿里巴巴的 fastjson  首先引入依赖 示例如下 输出结果:

    2024年02月15日
    浏览(54)
  • Java List集合去重、过滤、分组、获取数据、求最值、合并、排序、跳数据和遍历

    请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、 使用stream().map()提取List对象的某一列值及去重 使用 findAny() 和 findFirst() 获取第一条数据 我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!! 参考链接、参考链接

    2024年04月11日
    浏览(67)
  • Java8使用stream流给List<Map<String,Object>>分组(多字段key)

    Java8使用 stream流 给ListMapString,Object根据字段key 分组 一、项目场景: 从已得到的List集合中,根据某一元素(这里指map的key)进行分组,筛选出需要的数据。 如果是SQL的话则使用 group by 直接实现,代码的方式则如下: 使用到stream流的 Collectors.groupingBy() 方法。 二、代码实现 1、首

    2024年02月02日
    浏览(61)
  • 【Java】List更换指定位置的元素

    List更换指定位置的元素 使用的方法是 list.set() 方法: 打印结果: 参考链接:https://blog.csdn.net/qq_33210042/article/details/110289220

    2024年02月15日
    浏览(44)
  • Java8 List集合如何指定打印分隔符

    背景 无论是在学习还是日常的应用开发过程中,我们经常会需要使用分隔符将 List 集合打印出来。 如下所示: 执行结果如下: 如果我们想在打印的时候不打印 [] ,然后将分隔符换成 、 顿号,应该怎么操作呢? 其实有两种方法可以实现: 方法一:String.join(推荐) String

    2024年02月10日
    浏览(51)
  • Java自定义校验注解实现List、set集合字段唯一性校验

    在开发过程中,前端给后端传递集合,并且需要保证集合的实体类中的某些字段必须是惟一的,不能重复。 传递的集合: 集合对应的实体类: 如果我们要保证传递的name或者card必须是唯一的,不能重复,应该如何实现呢,此时可以通过自定义注解的方式实现。 @Documented @Do

    2024年02月14日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包