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;


    }
}

 

posted on 2021-04-21 09:35  王半仙儿的博客  阅读(1019)  评论(0编辑  收藏  举报

导航