美文网首页基础知识
Map优化for循环并消除if判断的实战(java1.8 利用s

Map优化for循环并消除if判断的实战(java1.8 利用s

作者: 惠惠雨辰 | 来源:发表于2020-12-10 21:44 被阅读0次

    背景:从数据库中分别获取两个list集合list<A>,list<B>,两个list通过ID进行关联,现在要用B中的属性b,对A中的属性a进行更新。

    反例:正常来说是采用双重for循环,然后if条件判断ID时候相等,进行复制

    步骤:

    1.将list<B>转为map 

    2.通过stream进行更新list<A>

    代码实现

    List<A> lista = new ArrayList();

    List<B> listb = new ArrayList();

    map listMap = listb.stream().collect(Collectors.toMap(B::getId,B::getb,(value1,value2) -> value1));

    lista.stream().foreach(valuea -> valuea.seta(listMap.get(valuea.getId())));

    //toMap()的三个参数第一个是转为map的key值,第二个为转为map的value,第三个为如果前面出现了两个ID是一个的情况下,value值选择第一个

    这个方式采用了java8中的stream流的方式,大大减少了代码的复杂度,而且采用流式编程能够提高新能

    优化:

    这个在转化的时候有问题,就是当getb() 获取的方法为空时,这是就会报空指针异常,所以我们一般在业务层面会进行空指针的处理,例如将B::getb换为 b -> StringUtils.isEmpty(b.getb()) ? "" : b.getb().当然这里也有其他的方式,但是一般都是直接业务逻辑进行处理

    可参考https://www.cnblogs.com/sueyyyy/p/13502055.html

    相关文章

      网友评论

        本文标题:Map优化for循环并消除if判断的实战(java1.8 利用s

        本文链接:https://www.haomeiwen.com/subject/tvekgktx.html