Kehaw

Java-Stream学习第四步:数据处理


学习一个新的知识,在很长一段时间内都是枯燥乏味的,直到你找到了真正的应用场景。而对数据库数据进行处理,是我们最常见的应用场景。

SQL 一直是一种声明式语言,而 Java 长期以来并不支持这种特性。而 Java Stream 改变了游戏规则。通过本文,你开始学习如何使用 Java 流对 RDBMS 数据库执行声明式的查询,而无需编写任何SQL代码。 您会发现,Java流和SQL命令的动词之间有着惊人的相似性。

Database Streams

当你对 Stream 的操作越来越熟悉之后,你会发现 Java Stream 与 SQL 有着惊人的相似,几乎就是 C# 的 LinQ 的翻版。例如我们前面所提到的 limit()count() 以及 groupBy() 等函数。

上面的这张表展示了 Java Stream 与 SQL 的对应关系。

这里的处理 Stream Source 的方式就有点像 C# 的内存表!

我们通过一个简单的实例来讲述如何通过 Java Stream 来实现对数据库的查询操作,我们假设有一个叫做 films的流数据集。首先我们对数据进行计数:

long cound = films.stream()
   .filter(Film.RATING.equal("PG-13"))
   .count();

我们通过查询条件 PG-13 对数据进行了一次过滤,然后我们调用 count() 函数进行计数。

我们还可以查询名称最长的数据:

Optional<Film> longestFilm = films.stream().max(Film.LENGTH);

或者是名字最短的三个数据:

List<Film> threeShortFilms = films.stream()
 .filter(Film.LENGTH.lessOrEqual(50))
 .limit(3)
 .collect(toList());

甚至是对内存数据进行分页查询:

List<Film> filmsSortedByLengthPage2 = films.stream()
 .sorted(Film.LENGTH)
 .skip(25 * 1)
 .limit(25)
 .collect(toList());

查询所有以A开头数据:

List<Film> filmsTitleStartsWithA = films.stream()
 .filter(Film.TITLE.startsWith("A"))
 .sorted(Film.LENGTH)
 .collect(Collectors.toList());

对数据进行简单的统计:

Map<Short, Long> frequencyTableOfLength = films.stream().collect(Collectors.groupingBy(
  Film.LENGTH.asShort(),
  counting()
 ));
Kehaw

👨‍💻Ke Haw 🇨🇳👨‍👩‍👧‍👦

风吹云散去,夜色好观星
Java | 前端 | 大数据

专注于 Spring Cloud 微服务架构与数据处理,研究一切与Java相关的开发技术,包括一部分前端技术。

目前的工作主要是关于B2B大宗商品在线交易领域的数据处理。如果对本站的部分内容感兴趣,请通过邮件、Twitter联系我🤝。

Fork me on Gitee
基于Spring Security + OAuth2 + JWT 的权限认证(一) Java-Stream学习第四步:数据处理 Java-Stream学习第三步:终端操作 Java-Stream学习第二步:处理流 Java-Stream学习第一步:创建流 Electron使用串口通信 Electron下调用DLL文件 国外SaaS服务供应商都是干什么的:Part1 为什么Kafka会丢失消息 Spring Boot中使用JSR380验证框架
Description lists
Kehaw's blog
Site description
人初做事,如鸡伏卵,不舍而生气渐充;如燕营巢,不息而结构渐牢;如滋培之木,不见其长,有时而大;如有本之泉,不舍昼夜,盈科而后进,放乎四海。
Copyright
© 2014 Copyright Kehaw | All rights reserved.