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; } }
新鲜刺激的东西永远都有,玩之前掂量掂量自己几斤几两