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)


目录
相关文章
|
7天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
37 10
|
6天前
|
存储 Java 开发者
什么是java的Compact Strings特性,什么情况下使用
Java 9引入了紧凑字符串特性,优化了字符串的内存使用。它通过将字符串从UTF-16字符数组改为字节数组存储,根据内容选择更节省内存的编码方式,通常能节省10%至15%的内存。
|
15天前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
33 5
|
15天前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
17天前
|
安全 Java API
Java中的Lambda表达式与Stream API的高效结合####
探索Java编程中Lambda表达式与Stream API如何携手并进,提升数据处理效率,实现代码简洁性与功能性的双重飞跃。 ####
24 0
|
2天前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
20 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
|
4天前
|
XML JSON 缓存
阿里巴巴商品详情数据接口(alibaba.item_get) 丨阿里巴巴 API 实时接口指南
阿里巴巴商品详情数据接口(alibaba.item_get)允许商家通过API获取商品的详细信息,包括标题、描述、价格、销量、评价等。主要参数为商品ID(num_iid),支持多种返回数据格式,如json、xml等,便于开发者根据需求选择。使用前需注册并获得App Key与App Secret,注意遵守使用规范。
|
3天前
|
JSON API 开发者
淘宝买家秀数据接口(taobao.item_review_show)丨淘宝 API 实时接口指南
淘宝买家秀数据接口(taobao.item_review_show)可获取买家上传的图片、视频、评论等“买家秀”内容,为潜在买家提供真实参考,帮助商家优化产品和营销策略。使用前需注册开发者账号,构建请求URL并发送GET请求,解析响应数据。调用时需遵守平台规定,保护用户隐私,确保内容真实性。
|
3天前
|
搜索推荐 数据挖掘 API
淘宝天猫商品评论数据接口丨淘宝 API 实时接口指南
淘宝天猫商品评论数据接口(Taobao.item_review)提供全面的评论信息,包括文字、图片、视频评论、评分、追评等,支持实时更新和高效筛选。用户可基于此接口进行数据分析,支持情感分析、用户画像构建等,同时确保数据使用的合规性和安全性。使用步骤包括注册开发者账号、创建应用获取 API 密钥、发送 API 请求并解析返回数据。适用于电商商家、市场分析人员和消费者。
|
13天前
|
JSON API 开发工具
淘宝实时 API 接口丨淘宝商品详情接口(Taobao.item_get)
淘宝商品详情接口(Taobao.item_get)允许开发者获取商品的详细信息,包括基本信息、描述、卖家资料、图片、属性及销售情况等。开发者需注册账号、创建应用并获取API密钥,通过构建请求获取JSON格式数据,注意遵守平台规则,合理使用接口,确保数据准确性和时效性。