Stream流的特点_只能使用一次和Stream流中的常用方法_map

Stream流的特点_只能使用一次

public class FilterStudy04 {
    public static void main(String[] args) {
        //创建一个Stream流
        Stream<String> stream = Stream.of("张三丰", "张翠山", "赵敏", "周芷若", "张无忌");
        //对Stream流中的元素进行过滤,只要姓张的人
        Stream<String> stream2 = stream.filter((String name) -> {
            return name.startsWith("张");
        });
        //遍历stream2
        stream2.forEach(s -> System.out.println(s));

        //优化写法
//        stream.filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));

        /**
         * Stream流属于管道流,只能被消费(使用)一次
         * 第一个Stream流调用完毕方法,数据就会流转到下一个Stream上,而这时第一个Stream流已经使用完毕,就会关闭了
         * 所以第一个Stream流就不能再调用方法了
         * IllegalStateException: stream has already been operated upon or closed
         */
        stream.forEach(s -> System.out.println(s));
    }
}

Stream流中的常用方法_map

映射:map

如果需要将流中的元素映射到另一个流中,就可以使用map方法。方法签名:
java <R> Stream<R> map(Function<? super T,? extends R> mapper)
该接口需要一个Function函数式接口函数,可以将当前流中T类型数据转换为另一种R类型的流
image

复习Function接口

此前我们已经学习过java.util.stream.Function函数式接口,其中唯一的抽象方法为:
R apply(T t);
这可以将一种T类型转换称为R类型,而这种转换的动作,就称为映射

基本使用:

package com.yang.Test.StreamStudy;

import java.util.stream.Stream;


public class mapStudy {
    public static void main(String[] args) {
        //获取一个String类型的Stream流
        Stream<String> stream = Stream.of("1", "2", "3", "4");
/*        //使用map方法,把字符串类型的整数,转换为Integer类型的整数
        Stream<Integer> stream2 = stream.map((String s) -> {
            return Integer.parseInt(s);
        });
        //遍历stream2流
        stream2.forEach((Integer integer)->{
            System.out.println(integer);
        });*/

        //优化写法
        stream.map(s -> Integer.parseInt(s)).forEach(integer -> System.out.println(integer+5));
    }
}

posted @ 2022-07-21 14:08  我滴妈老弟  阅读(95)  评论(0编辑  收藏  举报