JDK8新特性之Stream流

Stream流思想

类似于电子厂的流水线作业。

从初始源头一步一步往下流,在往下流的过程中,每一个节点都进行一定的操作,最终完成这个产品的组装。

获取流

单列集合获取流:
直接调用集合的stream()方法。
数组获取流:
方法一:Stream.of(T… values)
方法二:Arrays里的静态方法

		//单列集合获取流,直接调用其中的stream()方法
        List<String> list = new ArrayList<>();
        list.add("xiao");
        list.add("lao");
        list.add("ben");
        Stream<String> stream1 = list.stream();
        System.out.println(Arrays.toString(stream1.toArray()));

        //数组获取流
        //方法一:Stream.of(T... values)
        String[] strArr = {"xiao", "lao", "ben"};
        Stream<String> stream2 = Stream.of(strArr);
        System.out.println(Arrays.toString(stream2.toArray()));

        //方法二:Arrays里的静态方法
        Stream<String> stream3 = Arrays.stream(strArr);
        System.out.println(Arrays.toString(stream3.toArray()));//[aa, bb, cc]

使用流

流内置六种方法,如下所示:

//forEach:遍历
    @Test
    public void forEach() {
        List<String> list = new ArrayList<>();
        list.add("xiao");
        list.add("lao");
        list.add("ben");
        Stream<String> stream = list.stream();
        stream.forEach(s -> System.out.println(s));
    }

    //filter:过滤
    @Test
    public void filter() {
        List<String> list = new ArrayList<>();
        list.add("xiao");
        list.add("lao");
        list.add("ben");
        Stream<String> stream = list.stream();
        Stream<String> stringStream = stream.filter(s -> s.length() > 3);
        stringStream.forEach(s -> System.out.println(s));
    }


    //count:数数
    @Test
    public void count() {
        List<String> list = new ArrayList<>();
        list.add("xiao");
        list.add("lao");
        list.add("ben");
        Stream<String> stream = list.stream();
        long count = stream.count();
        System.out.println(count);
    }


    //limit:获取流中的前n个元素
    @Test
    public void limit() {
        List<String> list = new ArrayList<>();
        list.add("xiao");
        list.add("lao");
        list.add("ben");
        Stream<String> stream = list.stream();
        Stream<String> limit = stream.limit(2);
        limit.forEach(s -> System.out.println(s));
    }

    //skip:跳过流中的前n个元素
    @Test
    public void skip() {
        List<String> list = new ArrayList<>();
        list.add("xiao");
        list.add("lao");
        list.add("ben");
        Stream<String> stream = list.stream();
        Stream<String> limit = stream.skip(2);
        limit.forEach(s -> System.out.println(s));
    }


    //concat:合并两个流
    @Test
    public void concat() {
        Stream<String> stream1 = Stream.of("xiao");
        Stream<String> stream2 = Stream.of("lao", "ben");
        Stream<String> stream = Stream.concat(stream1, stream2);
        stream.forEach(s -> System.out.println(s));
    }

流的注意事项

1、流支持链式调用,但是只有返回结果是stream类型的才可以链式调用。forEach和count方法不可以链式调用。
2、Stream流只能一次性使用。这个流调用方法后,就死亡了,不可以继续调用别的,否则会报错。

java.lang.IllegalStateException: 
								stream has already been operated upon or closed
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值