zoukankan      html  css  js  c++  java
  • List按需转换Map

    需求 :

      Mybatis的<select>返回一个List,想按照实体类其中的属性转换成Map<String, String>
    实现过程:
      其实有很多方式,可以使用普通for循环,循环取属性put进Map中,由于Jdk8以后,有了Stream流的方式,函数式出现,简化了代码,其实我也不太懂,我倒是有本Java8函数式编程,想要的留个言我发给你。这里我用的是Jdk8的函数式编程进行转化的,具体过程如下

     // 返回权重Map [12A,20]
            List<EvalMeasureWeight> measureWeightList = comprehensiveAnalysisMapper.measureWeight(systemId);
    
            Map<String, String> collect = measureWeightList.stream().collect(Collectors.toMap(EvalMeasureWeight::getMeasureId,
                    EvalMeasureWeight::getWeight));

    坑点注意:
      可能这个一百度一堆,但是我们要注意的是,每个人的需求不一样,所以写法只是参考,不能说达到一致性的复用,复制不是也得改东西,你说呢?

    这里要提到。具体你想怎么用那是你的选择

    import lombok.Data;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    
    /**
     * @program: cloud-eurka-server7001
     * @description:
     * @author: Wangly
     * @create: 2021-04-21 09:03
     */
    public class TestLambda
    {
    
    
        void practice()
        {
            List<Pserson> list = new ArrayList<>();
            TestLambda.Pserson person1 = new Pserson();
            TestLambda.Pserson person2 = new Pserson();
            TestLambda.Pserson person3 = new Pserson();
            person1.setAge(12);
            person1.setName("Nipples");
            person2.setAge(16);
            person2.setName("feet");
            person3.setAge(17);
            person3.setName("handjob");
            person3.setAge(17);
            person3.setName("handjobs");
    
            list.add(person1);
            list.add(person2);
            list.add(person3);
    
            //1. 这里是按照Person年龄 % 2 == 0 做过滤条件 防止出现重复
            // /**
            // * List -> Map
            // * 注意:
            // * toMap 如果集合对象有重复的key,会报Duplicate key 的错误
            // *  apple1,apple12的id都为1。
            // *  可以用 (p1,p2)->p1 来设置,如果有重复的key,则保留key1,舍弃key2
            // */
            //                这里给的是一个过滤条件                   这里进行转Map的操作
            list.stream().filter(l ->l.getAge() % 2 == 0).collect(Collectors.toMap(Pserson::getAge, Pserson::getName,
                    (p1,p2) ->p2));
            //2. 这里其实已经完成了,如果要按某种条件分组 相同条件的元素放在一起,就按下面操作
            Map<Integer, List<Pserson>> collect = list.stream().collect(Collectors.groupingBy(Pserson::getAge));
            //3.再续
        }
        @Data
        class Pserson
        {
            private String name;
            private int age;
    
    
        }
    }
    新鲜刺激的东西永远都有,玩之前掂量掂量自己几斤几两
  • 相关阅读:
    不使用循环使用递归得到数组的值得求和
    将int转int数组并将int数组元素处理后转int,实现加密
    小程序总结
    见过的最好的Layout讲解,挺全的
    (转)Java 的swing.GroupLayout布局管理器的使用方法和实例
    三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)
    二十六、Jcreator使用初步
    The Java™ Tutorials下载地址
    中间容器
    二十七、Java图形化界面设计——容器(JFrame)
  • 原文地址:https://www.cnblogs.com/banxianer/p/14683899.html
Copyright © 2011-2022 走看看