如何使用流改进 Java 代码
来源:
Dev.to
什么是流?
Streams 首次出现在 Java 8 中。根据 Oracle 文档,它们是用于支持元素流上的函数式操作的类,例如集合上的映射缩减转换。简单来说,流由一个数据源、零个或多个中间操作和一个终端操作组成。
什么是数据源?
- 集合、列表、集合、整数、长整数、双精度数、数组、文件行。
什么是中间操作?
- 过滤、映射、排序等
- 这些操作返回一个 Stream,以便它们可以链接到其他操作。
什么是终端操作?
- ForEach、collect、reduce、findFirst 等
- 它们返回无效或非流结果。
- 如果线程没有终止操作,则不会调用中间体。
让我们使用 Streams 将函数从命令式风格转换为声明式风格
命令式功能(无流):
private int getResult_imperative(List<String> strings) {
int result = 0;
for (String string : strings){
if(isDigit(string.charAt(0))) continue;
if (string.contains("_")) continue;
result += string.length();
}
return result;
}
在这里我们注意到我们需要手动执行一些操作:
- 声明一个结果变量来跟踪结果。
- 循环遍历字符串。
- 编写两个if语句(这可能比本例复杂得多)。
- 将每个的长度添加到结果中。
让我们检查一下声明式风格(Streams):
private int getResult_Declarative(List<String> strings){
return strings.
stream().
filter(s -> !isDigit(s.charAt(0))).
filter(s -> !s.contains("_")).
mapToInt(String::length).
sum();
}
那么有什么区别呢?
- 我们通过调用stream()函数获得一个Stream对象。
- (中间操作)我们使用过滤函数两次 - 每次我们指定一个条件,该条件必须仅由我们想要在下一阶段移动到的那些元素满足。
- (中间操作)我们通过调用length方法(使用方法引用样式)将每个String对象映射到int。
- (终端操作)将所有先前的int值相加。
观察结果
第二种方法是不是看起来更简单?我们表明了
我们想要什么,而不是我们想如何去做。这就是声明式编程的精神,也是现代 Java 应用程序中 Stream API 的目标。
面向 Java 开发人员的五个最佳 IntelliJ IDEA 插件
来源:
GitHub插件在定期处理代码时在许多情况下都非常有用。它们能够扩展核心功能、提供各种集成并支持许多任务的自动化。以下是我认为最好的插件:
声纳林特
SonarLint 允许您在编写代码时修复错误和漏洞。它实时突出显示编码问题,为开发人员提供如何修复这些问题的清晰说明,以便您可以在提交代码之前修复它们。这个插件是必要的,因为它极大地改进了编码。
Maven 助手
我希望你正在使用 Maven?我愿意!Maven Helper 插件提供:
- 分析和消除冲突依赖关系的简单方法;
- 找到直接或传递依赖关系的简单方法;
- 为包含当前文件的模块或根模块运行/调试 Maven 目标的步骤;
- 在 Maven 模块的当前路径上打开终端的操作;
- 运行/调试当前测试文件的操作。如果 maven-surefire-plugin 配置为跳过或排除测试,则将使用“验证”目标。各种配置样式可以在 GitHub 上找到。
代码度量
该插件具有基于 Java 文件的自定义难度计算的选项卡指示器。它们在类和方法中为开发人员提供提示,以便他可以轻松确定需要检查的内容。尽管这不是标准度量,但它非常接近
圈复杂度。您还可以通过更改适当的配置条目来自定义项目的复杂性计算。
字符串操作
大小写切换、排序、过滤、缩放、列对齐、grepping、转义、编码等等...
JPA 好友
JPA Buddy 使与 JPA 相关的一切变得简单快捷。它提供了帮助您使用 Hibernate、Spring Data JPA、Liquibase、Flyway 的工具。
JPA Buddy 的主要特点:
- JPA 实体:创建和编辑实体、实体属性、生命周期回调、索引和约束。支持 JPA 转换器和 Hibernate 自定义类型。能够对实体使用 Lombok 注释。
- 为 JPA 实体创建 equals、hashCode 和 toString 方法的正确实现。
- JPA 实体声明的源代码意图、检查和快速修复。
- 在持久单元节点下的 JPA 结构面板中以图形方式显示实体关系。
- 自动生成 Liquibase 更改日志和 Flyway 版本迁移:数据库到数据库、模型到数据库、模型到快照比较。
- Visual Liquibase 变更日志设计器和编码帮助:创建和编辑项目、引用表名称、列名称、包含文件等。
- 操作:创建 Liquibase 快照,执行命令“Liquibase update”和“Liquibase updateSQL”。
- Spring Data Repositories:创建存储库、创建存储库方法、编辑方法属性、基于实体类创建投影、提取 JPQL 查询。
- Kotlin:所有视觉设计师完全支持 Kotlin 对象和存储库的代码生成。
我说的是前五个插件,但我还有一个......
额外的图标
这是一个图标集合,添加了 Markdown、Yaml、Maven、Git 等文件的快捷方式。您会习惯它们,因为它们可以帮助您轻松识别文件。你肯定会需要它们。
GO TO FULL VERSION