Java8新特性:强大的Stream API——再看不懂我找不到女朋友

简介: Java8新特性:强大的Stream API——再看不懂我找不到女朋友

Java8新特性:Stream

Stream是Java8中产生的一个新特性,可以把它理解成一种流,但也可以把它当做是一种特殊的容器

他可以结合Lambda表达式帮我们处理数据变得非常容易

一般来说使用它有三个步骤:

1、创建Stream

2、中间操作

3、终止操作(终端操作)

还是举个例子吧:

我们还是来遍历这个集合

List<Employee> list= Arrays.asList(
            new Employee("张三",18,5000),
            new Employee("李四",28,6000),
            new Employee("王五",48,4000),
            new Employee("马六",35,3000),
            new Employee("田七",25,3000),
            new Employee("田七",25,3000)
);

我们之前用Lambda表达式可以用

list.foreach((e)->System.out.println(e))

现在可以使用另外一种方式:

list.stream()
    .foreach((e)->System.out.println(e))

或者是:

list.stream()
    .foreach(System.out::println)

后两种写法其实是一样的,第二种就是实现了抽象方法,第三种是进行了类方法引用

最后一句打印就是终止操作,如果一个流不进行终止的话,那么中间的数据操作是不会执行的

Stream.iterate(1,(x)->x+2).limit(10).forEach(System.out::println);

这个是产生无限流,要用limit进行限制,类似于python中的列表生成器

Stream的一些方法

  • filter:参数是Lambda,可以利用他筛选出流内的一些数据
  • limit:截断流,使其元素不超过给定数量
  • skip:跳过元素,返回一个跳过前n个元素的流
  • distinct:通过元素的hashcode方法和equals方法去除重复元素,一般要进行重写

示例:挑选出员工年龄大于30岁的人

list.stream()
    .filter((e)->e.getAge()>30)
    .foreach(System.out::println)

示例:取出年龄大于30岁的前3个

list.stream()
    .filter((e)->e.getAge()>30)
    .limit(3)
    .foreach(System.out::println)

示例:年龄大于30岁的前3个人不要

list.stream()
    .filter((e)->e.getAge()>30)
    .skip(3)
    .foreach(System.out::println)

示例:去重属性相同的人,去重规则需要重写hashcode方法和equals方法

list.stream()
    .filter((e)->e.getAge()>30)
    .distinct()
    .foreach(System.out::println)

Stream的映射

  • map:函数参数为Lambda表达式,将流中每个数据进行指点方法进行处理,返回相对于的元素存入新流中
  • flagmap:和map同理,但是有一点不同,当流中的每个元素是流时,用map就会进行两次遍历,类似于集合中的集合,就会遍历两遍,但是使用flagmap是就会将多个流合并成一个流,类似于集合中的addAll,他会将另外一个集合拆开,然后将每个元素再存入
List<String> list2=Arrays.asList("AF","sdf","Gd");
@Test
    public void test11(){
        list2.stream()
                .map(Main::filterCharacter)
                .forEach((e)-> System.out.println(e));
    }
    public static Stream<Character> filterCharacter(String str){
        List<Character> list=new ArrayList<>();
        for(Character ch:str.toCharArray()){
            list.add(ch);
        }
        return list.stream();
    }
    @Test
    public void test12(){
        list2.stream()
                .flatMap(Main::filterCharacter)
                .forEach((e)-> System.out.println(e));
    }

Stream排序

分为两种,自然排序和定制排序

第一种就是调用sorted方法,自动升序排序

但是要设计满足我们的需求,就要传入参数Lambda表达式,进行我们想要的操作,和实现Comparator的compare方法差不多

示例:优先按年龄排序从小到大,如果年龄相同则按照姓名字典序降序

list.stream()
    .sorted((e1,e2)->{
        if(e1.getAge==e2.getAge){
            return -e1.getName.compareTo(e2.getName);
        }else{
            return Integer.compare(e1.getAge,e2.getAge);
        }
    })
    .foreach(System.out::println);

Straem查找与匹配

  • allMatch:检查是否匹配所有元素
  • anyMatch:检查是否至少匹配一个元素
  • noneMatch:检查是否没有匹配所有元素
  • findFirst:返回第一个元素
  • findAny:返回当前流中的任意元素
  • count:返回流中元素的总个数
  • max:返回流中最大值
  • min:返回流中最小值

示例:

当我们要返回最大值时:

list.stream()
    .max((e1,e2)->Integer.compare(e1.getAge,e2.getAge))
    .foreach(System.out::println)

示例:

当我们要年龄中大于30岁中任意一个人时:

list.stream()
    .filter((e)->e.getAge()>30)
    .findAny()
    .foreach(System.out.println)


目录
相关文章
|
23小时前
|
Java API
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
|
9天前
|
分布式计算 Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第1天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的函数式编程语法,可以简化代码并提高可读性。Stream API是一种用于处理集合的新工具,可以方便地进行数据操作和转换。通过结合Lambda表达式和Stream API,我们可以更加简洁高效地编写Java代码。
|
11天前
|
Java
Java8 Stream Collectors groupingBy使用
Java8 Stream Collectors groupingBy使用
|
13天前
|
Java API 开发者
【专栏】Java 8的Stream API是处理集合数据的新方式,强调简洁和声明式编程
【4月更文挑战第27天】Java 8的Stream API是处理集合数据的新方式,强调简洁和声明式编程。它基于延迟执行和惰性求值,提供创建、中间操作(如filter、map)和终端操作(如forEach、collect)。示例展示了如何通过Stream排序、过滤、映射和聚合数据。
|
29天前
|
SQL API Python
Python DB API下规范下cursor对象常用接口
Python DB API下规范下cursor对象常用接口。
21 4
|
4天前
|
JSON 搜索推荐 数据挖掘
电商数据分析的利器:电商关键词搜索API接口(标题丨图片丨价格丨链接)
淘宝关键词搜索接口为电商领域的数据分析提供了丰富的数据源。通过有效利用这一接口,企业和研究人员可以更深入地洞察市场动态,优化营销策略,并提升用户体验。随着电商平台技术的不断进步,未来的API将更加智能和个性化,为电商行业带来更多的可能性。
|
11天前
|
存储 缓存 运维
DataWorks操作报错合集之DataWorks根据api,调用查询文件列表接口报错如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
22 1
|
12天前
|
SQL 数据管理 API
数据管理DMS产品使用合集之阿里云DMS提供API接口来进行数据导出功能吗
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
12天前
|
运维 Serverless API
Serverless 应用引擎产品使用之在阿里函数计算中开启函数计算 API 接口如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
110 6
|
15天前
|
前端开发 Java 测试技术
IDEA 版 API 接口神器来了,一键生成文档,贼香!
IDEA 版 API 接口神器来了,一键生成文档,贼香!
44 0