Spring Boot 中流操作使用

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)。附一张图参考,可能还需要进一步优化,不过肯定比线性查询出来后一行一行来的快(见灰色注释掉的代码)

流操作消除重复代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址: 深蓝至尊 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得...
    咻咻咻i阅读 1,177评论 0 0
  • 转自: Java 8 中的 Streams API 详解 为什么需要 Stream Stream 作为 Java ...
    普度众生的面瘫青年阅读 2,936评论 0 11
  • 流提供了一种让我们可以在比集合更高的概念级别上指定计算的数据试图,用来解决“做什么而非怎么做”的问题。 从迭代到流...
    _gitignore阅读 1,237评论 0 1
  • 为什么使用 Lambda 表达式 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传...
    强某某阅读 14,859评论 0 15
  • 原文地址: http://cr.openjdk.java.net/~briangoetz/lambda/lambd...
    mualex阅读 660评论 0 0