Java的Stream表达式

本文探讨了Java8的新特性——Stream表达式。Stream可以比喻为数据处理的管道,通过中间操作(如filter、map)和终止操作(如reduce、collect)对数据进行加工和计算。文章介绍了Stream的源头(数组、集合),并详细阐述了中间操作和终止操作的各种用法,旨在简化编程中的循环等常见操作。
摘要由CSDN通过智能技术生成

title:Java的Stream表达式


Java的Stream表达式

一、如何理解Stream

  • Java8新特性

    Stream可以理解为管道,管道里的流水就是数据,管道里可以对水进行处理,如过滤,消毒,净化等等操作。最后流出的水才能喝。

    所以我理解Stream关注的是对数据的加工计算。对比java集合框架,集合框架关注的是如何存取数据。

    img

  • 一个stream操作主要有3个部分:源头、中间操作、终止操作。

    中间操作可以有0个或多个 但不是立马执行的,只有终止操作被调用后中间操作才会一起执行(惰性执行)

  • 有了stream操作后 会简化我们的操作,如循环

    如循环一个数组,打印,如下操作,而非原来的for循环,是否很简洁

    int[] intArray = new int[]{2,4,6,1};
    Arrays.stream(intArray).forEach(System.out::println);
    

二、Stream的数据来源

  • 数组

    int[] intArray = new int[]{2,4,6,1};
    Arrays.stream(intArray).forEach(System.out::println);
    Stream.of(intArray).forEach(System.out::println);
    
  • 集合

    strList.stream().forEach(System.out::println);
    Stream.of(strList).forEach(System.out::println);
    

三、中间操作

  • 主要有filter map flatmap sorted skip limit distinct

  • 筛选与切片 filter、limit、skip、distinct

    //filter --帅选出想要的数据
    List<String> list = Arrays.asList("bbb", "aaa", "ddd", "aaa", "ccc", "ddd", "eee");
    list.stream().filter(e -> "aaa".equals(e)).forEach(e -> System.out.print(e + " "));
    outPut : aaa aaa 
        
    //limit  --截断流,使其元素不能超过给定数量
    List<String> list = Arrays.asList("bbb", "aaa", "ddd", "aaa", "ccc", "ddd", "eee");
    list.stream().filter(e -> "aaa".equals(e)).limit(1).forEach(e -> System.out.print(e + " "));
    outPut : aaa
    
    //ship  --跳过元素,返回一个扔掉了前n个元素的流,若流中元素不足n个,则返回一个空流,与limit(n)互补
    List<String> list = Arrays.asList("bbb", "aaa", "ddd", "aaa", "ccc", "ddd", "eee");
    list.stream().skip(2).forEach(e -> System.out.print(e + " "));
    outPut : ddd aaa ccc ddd eee 
        
    //distinct  --筛选,通过流所生成元素的hashCode()和equals()去除重复元素
    List<String> list = Arrays.asList("bbb", "aaa", "ddd", "aaa", "ccc", "ddd", "eee");
    list.stream().distinct().forEach(e -> System.out.print(e + " "));
    outPut : bbb aaa ddd ccc eee 
    
  • 映射 map、flatmap

    //map --将元素转换成其他形式或提取信息。接收另一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
    List<String> list = Arrays.asList("bbb", "aaa", "ddd", "aaa", "ccc", "ddd", "eee");
    list
Java StreamJava 8中引入的一个新特性,它是对集合、数组等元素的一种流式处理方式。Stream可以使得对集合元素的操作更加简洁、灵活、高效,同时也可以支持并行处理。Stream的使用需要遵循以下几个步骤: 1. 获取一个Stream对象。可以通过集合、数组等方式获取Stream。 2. 对Stream进行中间操作。Stream支持多种中间操作,例如filter、map、sorted、distinct等等。 3. 对Stream进行终止操作。终止操作会触发对Stream元素的处理,例如forEach、reduce、collect等等。 下面是一个使用Stream的简单示例: ```java List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // 使用Stream过滤出偶数,并将结果打印出来 numbers.stream() .filter(n -> n % 2 == 0) .forEach(System.out::println); // 使用Stream计算出所有奇数的和,并将结果打印出来 int sum = numbers.stream() .filter(n -> n % 2 != 0) .mapToInt(Integer::intValue) .sum(); System.out.println("Sum of odd numbers: " + sum); ``` 在上面的示例中,首先使用`numbers.stream()`获取了一个Stream对象,然后使用`filter`中间操作过滤出偶数或奇数元素,最后使用`forEach`或`sum`等终止操作对Stream元素进行处理。 Stream的使用可以大大简化Java集合、数组等元素的处理,同时也可以实现并行处理从而提高代码的效率。但是需要注意,Stream的使用可能会增加代码的复杂度,因此在使用时需要注意代码的可读性和维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值