一句话搞懂Java8 stream!!!

简介: 在review代码的过程中,经常看到一些代码能够使用stream的方式处理的更好,会建议同事使用stream。

在review代码的过程中,经常看到一些代码能够使用stream的方式处理的更好,会建议同事使用stream。


stream 作为 Java 8 提供的 特性,过去这么多年了,但是在开发中有些程序小哥哥依然不愿意使用,觉得代码不够直白,宁愿多写一些for循环,但是历史证明新欢总比旧爱好,留下的都是优质的。不去接触,学习下新鲜事物,必将成为一个老古董 。只要你想下车撒泡尿,你就会被历史的车轮无情甩下,因为这是一趟高铁。你看新欢正在向你招手。


99123b58dce54a97850fcdff01f8eb6b~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

1、为什么不愿意使用流


我认为有几方面的原因:


一是现在的for while 能解决问题,没必要


二是没有发现stream的好,不愿意使用。


三是自己没有抓住理解的核心,记忆起来很费劲,用起来不顺手。


2、理解流


流 如字面意思,顺序处理,最终产出结果。


我的理解,流和sql 有差不多的行为方式。对数据进行筛选,整合。


 

微信截图_20220606192127.png


作为Java程序员一般都会知道如何写Sql,一个简单的sql 像下面这样:


select * from table where 限制条件 group by 条件 limit 10 
从数据源中过滤出数据,进行分组,然后取一部分。
复制代码


sql能做的事,流基本都能做。


3、举个例子


3687760d45054f9e89c42dc484d17d31~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

 

定义Player类的定义如下:


/**
 * 玩家类 
 * 公众号:香菜聊游戏
 */
@AllArgsConstructor
public class Player {
    //  名字
    @Getter @Setter
    public String name;
    //  性别
    @Getter @Setter
    private int sex;
    //  年龄
    @Getter @Setter
    private int age;
    //  工资
    @Getter @Setter
    private int salary;
}
复制代码


1、过滤数据 ==>where


//  过滤出年龄在18岁以上的所有人的名字
        List<Player> age18List = playerList.stream()
        .filter(player -> player.getAge() > 18)
        .collect(Collectors.toList());
复制代码


2、过滤字段 ==>也就是select 的列


List<String> age18NameList = playerList.stream()
                .filter(player -> player.getAge() > 18)
                .map(Player::getName)
                .collect(Collectors.toList());
复制代码


3、分组,按性别分组 ==> group by


Map<Integer, List<Player>> age18GroupMap = playerList.stream()
                .filter(Player -> Player.getAge() > 18)
                .collect(Collectors.groupingBy(Player::getSex));
复制代码


4、排序后取前两位 ==> limit


//  过滤出年龄在18岁以上并且最小的2个
        List<Player> age18List = playerList.stream()
                .sorted(Comparator.comparingInt(Player::getAge))
                .limit(2)
                .collect(Collectors.toList());
复制代码


5、求和 ==> sum


Integer age18SumSalary = playerList.stream()
                .map(Player::getSalary)
                .reduce(0,Integer::sum);
复制代码


以上几个例子只是stream的一些举例,介绍了和sql 的相似性。只要你想到的都可以实现。sql不好实现的stream也可以实现。在学习的时候先了解,在使用的时候不清楚可以搜索一下,多用几次就熟练了,就掌握了。stream没有增加什么新的东西,只是新瓶装旧酒,不同的语法形式而已。


选择「爱我」还是「恨我」,这矛盾永远存在... 恨我,因为我华美的表演,我自信到狂妄 恨我,因为我精准的后仰跳投,我对胜利的热切渴望 恨我,因为我是个无所不能的老手,一个胜者 憎恨我吧,请用你身体中的每一个细胞来狠狠的憎恨我,憎恨我被同样执著的一群人所深爱着


居然和你的丝毫不差…


4、总结


stream让我们的代码更简洁,逻辑上更加顺畅,写更少的代码,做更多的事。stream 解开了代码细节和业务逻辑的耦合,表达的是"要做什么"而不是"如何去做",可以更加专注于业务逻辑,写出易于理解和维护的代码。用sql的知识做类比,去完成对stream的认识,学习,知识迁移是我们学习的捷径,你掌握了吗?

目录
相关文章
|
15小时前
|
Java API
Java 8新特性之Lambda表达式与Stream API
本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的编程语法,可以使代码更简洁、易读。Stream API是一种处理数据的新方式,可以让我们更方便地对集合进行操作。通过学习这两个特性,我们可以编写出更简洁、高效的Java代码。
|
2天前
|
分布式计算 Java 程序员
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第21天】本文主要介绍了Java 8中的两个重要新特性:Lambda表达式和Stream API。Lambda表达式是Java 8引入的一种新的编程方式,它允许我们将函数作为参数传递给其他方法。而Stream API则是一种新的数据处理方式,它允许我们以声明式的方式处理数据,使得代码更加简洁易读。
|
3天前
|
Java 程序员 API
Java 8 Lambda 表达式和Stream API:概念、优势和实战应用
【5月更文挑战第20天】在Java 8中,Lambda 表达式和Stream API是两个非常强大的特性,它们显著改变了Java程序员处理数据和编写代码的方式。本篇技术文章将深入探讨这些特性的概念、优点,并提供实战示例,帮助理解如何有效地利用这些工具来编写更简洁、更高效的代码。
22 6
|
5天前
|
安全 Java API
Java进阶-Java Stream API详解与使用
效、更易于维护的代码,同时享受到函数式编程带来的好处。
18 2
|
6天前
|
Java 大数据 API
利用Java Stream API实现高效数据处理
在大数据和云计算时代,数据处理效率成为了软件开发者必须面对的重要挑战。Java 8及以后版本引入的Stream API为开发者提供了一种声明式、函数式的数据处理方式,极大提升了数据处理的效率和可读性。本文将详细介绍Java Stream API的基本概念、使用方法和性能优势,并通过实际案例展示如何在实际项目中应用Stream API实现高效数据处理。
|
6天前
|
自然语言处理 Java API
Java 8的Stream API和Optional类:概念与实战应用
【5月更文挑战第17天】Java 8引入了许多重要的新特性,其中Stream API和Optional类是最引人注目的两个。这些特性不仅简化了集合操作,还提供了更好的方式来处理可能为空的情况,从而提高了代码的健壮性和可读性。
29 7
|
6天前
|
Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第17天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的编程语法,它允许我们将函数作为参数传递给其他方法,从而使代码更加简洁。Stream API是一种用于处理集合的新工具,它提供了一种高效且易于使用的方式来处理数据。通过结合使用这两个特性,我们可以编写出更加简洁、高效的Java代码。
16 0
|
6天前
|
Java
Java8 Stream 用法合集
Java8 Stream 用法合集
|
8天前
|
Java API
Java 8新特性之Lambda表达式与Stream API实践指南
【5月更文挑战第15天】 随着Java语言的不断发展,Java 8作为一个重要的版本,引入了许多令人兴奋的新特性。其中,Lambda表达式和Stream API是Java 8最受关注的两个特性。本文将深入探讨Lambda表达式的基本概念、语法和使用场景,以及如何结合Stream API实现更加简洁、高效的代码编写。通过实例演示,帮助读者快速掌握这两个新特性,提高Java编程能力。
|
8天前
|
Java API 数据处理
Java一分钟之-Stream API:数据处理新方式
【5月更文挑战第13天】Java 8的Stream API为集合操作提供了声明式编程,简化数据处理。本文介绍了Stream的基本概念、常见问题和易错点。问题包括并行流与顺序流的区别,状态改变操作的影响,以及忘记调用终止操作和误用`peek()`。理解并合理使用Stream API能提升代码效率和可维护性。实践中不断探索,将发掘更多Stream API的潜力。
16 3