JavaRush /Java 博客 /Random-ZH /喝咖啡休息#73。如何使用流改进您的 Java 代码。面向 Java 开发人员的五个最佳 IntelliJ IDE...

喝咖啡休息#73。如何使用流改进您的 Java 代码。面向 Java 开发人员的五个最佳 IntelliJ IDEA 插件

已在 Random-ZH 群组中发布

如何使用流改进 Java 代码

来源: Dev.to喝咖啡休息#73。 使用 Streams 改进您的 Java 代码。 面向 Java 开发人员的五个最佳 IntelliJ IDEA 插件 - 1

什么是流?

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喝咖啡休息#73。 使用 Streams 改进您的 Java 代码。 面向 Java 开发人员的五个最佳 IntelliJ IDEA 插件 - 2插件在定期处理代码时在许多情况下都非常有用。它们能够扩展核心功能、提供各种集成并支持许多任务的自动化。以下是我认为最好的插件:

声纳林特

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 等文件的快捷方式。您会习惯它们,因为它们可以帮助您轻松识别文件。你肯定会需要它们。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION