高阶函数-Stream流的API

定义

  • 官方定义的一组高阶函数的工具API

数据流

    public static void main(String[] args) {
   
   
        // 定义一个对象流
        Stream<Fruit> objectStream = Stream.of(
                new Fruit("草莓","strawberry","浆果","红色"),
                new Fruit("桑葚","mulberry","浆果","黑色"),
                new Fruit("樱桃","cherry","浆果","红色"),
                new Fruit("蓝莓","blueberry","浆果","蓝色"),
                new Fruit("核桃","walnut","坚果","棕色"),
                new Fruit("杏仁","almond","坚果","棕色")
        );
    }

    record Fruit(String cname,String name,String category,String color){
   
   
    }

过滤-filter

在这里插入图片描述

// filter 过滤得到所有的浆果并且颜色是红色的 并打印
objectStream.filter(fruit -> "浆果".equals(fruit.category))
        .filter(fruit -> "红色".equals(fruit.color))
        .forEach(System.out::println);

映射-map

在这里插入图片描述

Fruit::cname 这是方法引用,但是这种写法是record特有的

// map 映射 将对象流中所有的水果变成果酱 并打印
fruitStream.map(Fruit::cname)
        .map(cname -> cname + "酱")
        .forEach(System.out::println);

扁平化(降维)-flatMap

在这里插入图片描述

  • 我们可以ctrl + p 查看一下参数Function的类型
  • 第一个参数是一个List,这个是入参:代表Stream中的每一个元素的类型都是List<Fruit>类型的
  • 第二个参数是返回结果:代表最后会返回一个Stream<Fruit> 类型的流给你

在这里插入图片描述

// 二维流
Stream<List<Fruit>> stream = Stream.of(
        List.of(
                new Fruit("草莓", "strawberry", "浆果", "红色"),
                new Fruit("桑葚", "mulberry", "浆果", "黑色"),
                new Fruit("樱桃", "cherry", "浆果", "红色"),
                new Fruit("蓝莓", "blueberry", "浆果", "蓝色")
        ),
        List.of(
                new Fruit("核桃", "walnut", "坚果", "棕色"),
                new Fruit("杏仁", "almond", "坚果", "棕色")
        )
);
// flatMap 将二维流转换为一维流
// 方法引用 List::stream 等价于 list -> list.stream() 将每一个list转换为流
stream.flatMap(List::stream)
        .forEach(System.out::println);

构建流-stream、of

在这里插入图片描述

基于集合或者map创建流

// 基于已有集合来创建流
Stream<Integer> intStream = List.of(1, 2, 3, 4).stream();
// map无法直接变成流 但是可以通过entrySet变成set 通过set再变成流
Stream<Entry<Integer, String>> mapStream = Map.of(1, "a", 2, "b").entrySet().stream();        

基于数组创建流

// 基于数组来创建流
int[] arr = {
   
   1, 2, 3, 4};
Stream<int[]> arrStream = Stream.of(arr);

基于对象创建流

// 定义一个对象流
Stream<Fruit> fruitStream = Stream.of(
        new Fruit("草莓", "strawberry", "浆果", "红色"),
        new Fruit("桑葚", "mulberry", "浆果", "黑色")
);

合并与截取

在这里插入图片描述

合并

// concat 连接两个流
System.out.println("concat 连接两个流");
Stream.concat(stream1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值