Stream流

Stream

Stream 是 JDK 8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等
操作。使用 Stream API 对集合数据进行操作,就类似于使用 SQL执行的数据库查询,当然,也可以使用 Stream API 来并行执行操作。换言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

注意:
① Stream 自己不会存储元素。
② Stream 不会改变源对象,每次处理读会返回一个持有结果的新的 Stream 。
③ Stream 操作是延迟执行的,意味着会等到需要结果的时候才执行。

操作步骤:

① 创建 Stream :通过一个数据源(如:集合、数组),获取一个流。
② 中间操作:中间操作是个操作链,对数据源的数据进行 n 次处理,但是在终结操作前,并不会真正的执行。
③ 终止操作:一旦执行终止操作,就执行中间操作链,最终产生结果并结束 Stream 。

创建 Stream

集合创建 Stream

E.stream()方法转;

List<Integer> list = Arrays.asList(1, 2, 3,4, 5);
// 获取顺序流
Stream<Integer> stream = list.stream();
stream.forEach(System.out::println);

数组转 Stream

Arrays.stream(srr)方法转

//把数组转成Stream流
String[] srr  ={"java","python","c++","web"};
Stream<String> stream = Arrays.stream(srr);//
System.out.println(stream);
//取出流中的数据
stream.forEach(System.out::println);//方法引用的写法

Stream.of() 方法创建 Stream

Stream<Integer> stream = Stream.of(1, 2, 3, 4);
System.out.println("stream = " + stream);
Stream<Integer> stream =Stream.of(10,20,30,40,50);
stream.forEach(System.out::println);
System.out.println("_________________");
String[] srr ={"java","puthon","c++","spring" };
Stream<String> stream2 = Stream.of(srr);
stream2.forEach(System.out::println);

无限流创建 Stream

可以使用 Stream 类的静方法 iterate 和 generate 创建无限流。

Stream<Integer> stream = Stream.iterate(1,num -> num + 1);
stream.limit(10).forEach(System.out::println);

中间操作

1.forEach:循环stream.forEach( student ->{
System.out.println(student);
});

2.filter:过滤

Stream<Integer> stream = list.stream();//集合工具
        //过滤偶数留下奇数
        Stream<Integer> stream2 = stream.filter((i)-> i%2==0);
        stream2.forEach(System.out::println);
ArrayList<students> list =new ArrayList<>();
students s1 = new students(1001,"张三",78);
Collections.addAll(list,s1,s2,s3,s4,s5,s6,s7,s8);
        Stream<students> stream = list.stream();
Stream<students> stream2 =stream.filter(s ->s.getSorce() >=70&&s.getSorce() <=90) ;
        stream2.forEach(System.out::println);

3.distinct:去重

Stream<Integer> stream =Stream.of(1,2,2,2,3,4,5);
       // stream.forEach(System.out::println);
        //去重复元素
        stream.distinct().forEach(System.out::println);

4.limit:截断限制

Stream<Integer> stream =Stream.of(1,2,2,2,3,4,5,6,66,10,666,6,6);
        //限制流保留前五位数据
        stream.limit(5).forEach(System.out::println);
Collections.addAll(list,s1,s2,s3,s4,s5,s6,s7,s8);
        Stream<students> stream = list.stream();
        //对分数进行排序,从高到低
        stream.sorted((stu1,stu2) -> (stu2.getSorce()-stu1.getSorce()) ).limit(3).forEach(System.out::println);

5.skip:跳过前 n 个元素的流

Stream<Integer> stream =Stream.of(1,2,2,2,3,4,5);
        //跳过前n个流
        stream.skip(3).forEach(System.out::println);

6.peek:对每个元素都进行 Lambda 操作

@Test
    public void test02(){
        //对每个元素进行操作,没个元素扩大两倍
        Stream<Integer> stream =Stream.of(1,2,2,2,3,4,5);
        Stream streamPeek = stream.peek(a -> {
            System.out.println(a);
        });
        System.out.println(streamPeek.count());

    }

7.sorted: 对流中的数据进行自然排序:Stream sorted();

Stream<Integer> stream =Stream.of(2,1,3,4,5,6,66,10,666);
        //对流数据进行排序
        stream.sorted().forEach(System.out::println);

● 对流中的数据进行自定义排序:Stream sorted(Comparator<? super T> comparator);

8.map:映射,接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。

Stream<Integer> stream =Stream.of(1,2,3,4,5,6);
        //把stream每个元素扩大两被
        stream = stream.map(i -> i*2);
        stream.forEach(System.out::println);;
Stream<students> stream = list.stream();
        Stream<students> stream2 = stream.sorted((stu1,stu2) -> (stu2.getSorce()-stu1.getSorce()) ).limit(3);
        //stream2.forEach(System.out::println);
        //对前三名学生每人加5分
        stream2.map(stu ->stu.getSorce()+5).forEach((System.out::println));

9.collect

//把流转为集合
        List<Integer> list = Stream.of(8,2,10,4,12,6).collect(Collectors.toList());
        System.out.println(list);

终止操作:

allMatch检查流所操作的所有元素是否匹配规则:

// allMatch判断流所操作的元素是否都是偶数
    boolean allMatch = Stream.of( 2, 4, 6).allMatch(i -> i % 2 == 0);
    System.out.println("allMatch = " +allMatch); // allMatch = false

flatMap接收一个函数作为参数,
将流中的每个值都换成另
一个流,然后把所有流连
接成一个流。

Optional

Optional 实际上是个容器:它可以保存类型 T 的值,或者仅仅保存 null 。

创建一个空的

Optional<String> optional =
Optional.of("abc");
System.out.println("optional = " +
optional);
// 创建一个可能为空的,也可能是非空的Optional
Optional<String> optional =
Optional.ofNullable("abc");
System.out.println("optional = " +
optional); // optional = Optional[abc]
optional = Optional.ofNullable(null);
System.out.println("optional = " +
optional); // optional = Optional.empty
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值