美文网首页
Spring Boot 中流操作使用

Spring Boot 中流操作使用

作者: whllhw | 来源:发表于2018-11-21 15:37 被阅读0次

    Java 8里面的流对象真好用,函数式编程让编码不一样,并且还能并发执行。这里给出一个业务中实际遇到的数据查询映射成一个奇特的Map映射

    {
      table1: [
        {
          name1: "",
          name2: ""
        },
        {
          name1: "",
          name2: ""
        }
      ],
      table2: [
        {
          name3: "1",
          name4: "2"
        },
        {
          name3: "3",
          name4: "4"
        }
      ]
    }
    

    如果使用普通的操作分别查询出table内的数据行得到List<table1Entity> lists 然后Map.put("table1",lists)就完成了,但是这对于表多的话重复代码就变多了,不符合代码重用的思想。这里给出一个解决方法:

    使用 Java8 的stream API可以较为高效的并发操作,不过理解起来有点难度,(调试也需要一点技巧?)

    首先新建一个key的列表List<String> names, 由其生成一个stream放入查询接口进行查询,得到另一个流,使用一个map进行映射出Javabean,利用filter删除为空的结果,最后Collectors.toList() 收集流。此时得到的是table1、table2的键值对数组([{"name1":"","name2":""}])。下面给他们按类别扔进对应的Key(由于没有统一基类故使用反射API调用其类型函数,返回类别),Collectors.toMap(s->{s.get(0).getClass().getMethod("getItemType").invoke(s)},s->s)。附一张图参考,可能还需要进一步优化,不过肯定比线性查询出来后一行一行来的快(见灰色注释掉的代码)

    流操作消除重复代码

    相关文章

      网友评论

          本文标题:Spring Boot 中流操作使用

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