154-Stream流特点*Stream流常用方法-映射map(只要不是终结方法,延迟方法返回的都是一个新的流)*统计个数count*limit(返回的是一个流)*跳过前几个skip();*

1.Stream流特点

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

        /*
        Stream流特点
        Stream属于管道流只能被使用一次
        第一个Stream流调用完毕方法,数据就会流转到下一个Stream上
        而这个时候第一个Stream流已经使用完毕就会关闭了
        所以第一个Stream流就不能再调用方法了
         */
        //遍历stream流 ,注意这里指的是遍历上面这个
       /* stream.forEach((name)->{
            System.out.println(name);
        });//报错  流已经关闭了 流只能使用一次这个名为stream的这个流已经被调用过一次了所以这里不能再被调用*/
       
    }
}

注意这里

 Stream流特点
 Stream属于管道流只能被使用一次
 第一个Stream流调用完毕方法,数据就会流转到下一个Stream上
 而这个时候第一个Stream流已经使用完毕就会关闭了
 所以第一个Stream流就不能再调用方法了
 
 //遍历stream流 ,注意这里指的是遍历上面这个
 stream.forEach((name)->{
     System.out.println(name);
 });
//报错  流已经关闭了 流只能使用一次这个名为stream的这个流已经被调用过一次了所以这里不能再被调用

类比于这个好多个步骤一步一步的 当进行到下一步时候上一步的流就关闭了也就不能再调用方法了 

2.映射map

 apply方法将T类型数据转换为R类型数据 这种转换的动作我们称之为“映射”

如果需要将流中的元素映射到另一个流中,可以使用map方法
<R> Stream <R> map(Function <? super T, ? extends R> mapper);
该接口需要一个Function函数式接口参数,可以将当前流中的T类型数据转换为另一种R类型的数据
Function中的抽象方法 :R apply<T t>
package Demo20;

import java.util.stream.Stream;

/*
如果需要将流中的元素映射到另一个流中,可以使用map方法
<R> Stream <R> map(Function <? super T, ? extends R> mapper);
该接口需要一个Function函数式接口参数,可以将当前流中的T类型数据转换为另一种R类型的数据
Function中的抽象方法
R apply<T t>
 */
public class Demo06map {
    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 str) -> {
            return Integer.parseInt(str);
        });  //注意这个流的范式式Integer类型
        //遍历stream2这个流
        stream2.forEach((Integer in)->{
            System.out.println(in);
        });

    }
}

 

3.统计个数count方法:终结方法返回的不是stream流也不能像上面一样调用Stream流中的其他方法比如forEach

Stream流中的常用方法 count:用于统计Stream流中元素的个数
long count();
count方法式一个终结方法,返回值是一个long类型的整数
所以不能再继续调用Stream流中的其他方法了

/*
Stream流中的常用方法 count:用于统计Stream流中元素的个数
long count();
count方法式一个终结方法,返回值是一个long类型的整数
所以不能再继续调用Stream流中的其他方法了
 */
public class Demo07count {
    public static void main(String[] args) {
        //获取一个Stream流
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        Stream<Integer> stream = list.stream();
        long count = stream.count();
        System.out.println(count); //输出7
    }
}

4 取用几个 limit

String流中的常用方法 limit:用于截取流中的元素
limit方法可以对流进行截取,只去用前n个
String<T> limit(long maxSize);
  参数是一个long型,如果集合当前长度大于参数则进行截取

limit方法是一个延迟方法,只是对流中的元素进行截取,返回的是一个新的流,所以可以继续调用Stream流中的其他方法
package Demo20;

import java.util.stream.Stream;

/*
String流中的常用方法 limit:用于截取流中的元素
limit方法可以对流进行截取,只去用前n个
String<T> limit(long maxSize);
  参数是一个long型,如果集合当前长度大于参数则进行截取

limit方法是一个延迟方法,只是对流中的元素进行截取,返回的是一个新的流,所以可以继续调用Stream流中的其他方法

 */
public class Demo08limit {
    public static void main(String[] args) {
        //获取一个Stream流   //集合
        String[] arr = {"美羊羊","喜洋洋","看洋洋","红太狼"};
        Stream<String> stream1= Stream.of(arr);
        //使用limit方法对Stream流中的元素进行截取,只要前三个元素
        Stream<String> stream2 = stream1.limit(3);//注意:limit返回的一个Stream流
        //遍历
        stream2.forEach((String name)->{
            System.out.println(name);
        });
    }
}

 5.跳过前几个skip();

Stream流中的常用方法 skip 用于跳过元素
如果希望跳过前几个元素,可以使用skip方法获取一个截取之后的新流
Stream<T> skip(long n);
  如果流的当前长度大于n ,则跳过前n个 ,否则将会得到一个长度为0的空流
package Demo20;

import java.util.stream.Stream;

/*
Stream流中的常用方法 skip 用于跳过元素
如果希望跳过前几个元素,可以使用skip方法获取一个截取之后的新流
Stream<T> skip(long n);
  如果流的当前长度大于n ,则跳过前n个 ,否则将会得到一个长度为0的空流
 */
public class Demo09skip {
    public static void main(String[] args) {
        //获取一个Stream流
        String[] arr = {"美羊羊","喜洋洋","看洋洋","红太狼"};
        Stream<String> stream = Stream.of(arr);
        //使用skip方法跳过前2个元素
        Stream<String> stream1 = stream.skip(2);
        stream.forEach((String name)->{
            System.out.println(name);
        });
    }
}

6.concat组合流

Stream流中常用的方法 concat:用于把流组合在一起
如果有两个流,希望合并成一个流,呢么可以使用Stream接口的静态方法concat
static <T> Stream<T> concat(Stream<? extends T> a , Stream<? extends T > b)
package Demo20;

import java.util.stream.Stream;

/*
Stream流中常用的方法 concat:用于把流组合在一起
如果有两个流,希望合并成一个流,呢么可以使用Stream接口的静态方法concat
static <T> Stream<T> concat(Stream<? extends T> a , Stream<? extends T > b)
 */
public class Demo10concat {
    public static void main(String[] args) {
        //创建Stream流
        Stream<String> stream1 = Stream.of("tt", "TT", "yy", "YY", "TY");
        Stream<String> stream2 = Stream.of("myy", "lyy", "fyy", "hyy", "hyy");
        //两个流组合为一个流
        Stream<String> concat = Stream.concat(stream1, stream2);  //concat把两个流组合在一起返回一个新的流
        concat.forEach((String str)->{
            System.out.println(str);
        });

    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值