IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Stream流常用方法 -> 正文阅读

[Java知识库]Stream流常用方法

1.Stream流的常用方法:

????? 终结方法:返回值类型不再是Stream接口本身类型的方法,例如:forEach方法和count方法
????? 非终结方法/延迟方法:返回值类型仍然是Stream接口自身类型的方法,除了终结方法都是延迟方法。例如:filter,limit,skip,map,concat
????? 方法名?????????????? 方法的作用???????????? 方法的种类?????????????? 是否支持链式调用
????? count???????????????? 统计个数???????????????????? 终结?????????????????????????? ? ? 否
????? foEach?????????????? 逐一处理???????????????????? 终结?????????????????????????????? 否
????? filter???????????? ? ? ? 过滤???????????????????????? 函数拼接?????????????????? ????????是
????? limit????????????? ? ?? 取用前几个????????????? 函数拼接?????????????????? ???????? 是
????? skip?????????????????? 跳过前几个????????????? 函数拼接??????????????????????????? 是
????? map??????????????? ? ? ? 映射???????????????????? 函数拼接????????????????????????? ? 是
????? concat???????????? ? ? ? 组合??????????????????? 函数拼接????????????????????????? ? 是

2.count方法:

      long count();   统计流中的元素,返回long类型数据
public class Tests_count {
    public static void main(String[] args) {
        /*
        * count方法:
        *       long count();   统计流中的元素,返回long类型数据
        *
        * */
        // 创建List集合
        List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("张三四");
        list.add("王五");
        list.add("赵六");
        list.add("张三三");
        list.add("周八");
        long count = list.stream().count();
        System.out.println("流中的属于个数:"+count);
    }
}

3.forEach

forEach方法:
????? void forEach(Consumer<? super T> action):逐一处理流中的元素
????????? 参数 Consumer<? super T> action : 函数式接口, 只有一个抽象方法:void accept(T t);
????? 注意:
????????? 1.此方法并不保证元素的逐一消费动作在流中是有序执行的
????????? 2.Consumer 是一个消费接口(可以获取流中的元素进行遍历操作,输出出去),可以使用lambda表达式

public class Tests_forEach {
    public static void main(String[] args) {
    List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("张三四");
        list.add("王五");
        list.add("赵六");
        list.add("张三三");
        list.add("周八");
        // 函数模型:获取流 --> 逐一消费流中的元素
        list.stream().forEach((String name)->{
            System.out.println(name);
        });
        /*
        * 虽然方法名称叫做【forEach】,但是与for循环中的【for-each】昵称不同,该方法并不保证元素的逐一消费动作在流中是被有序执行的
        * */
        System.out.println("==========================");
        // parallelStream()方法可以得到并行流
        list.parallelStream().forEach((String name)->{
            System.out.println(name);
        });
    }
}

4.filter方法

????? Stream<T> filter(Predicate<? super T> predicate);? 过滤出满足条件的元素
????????? 参数Predicate:函数式接口,抽象方法:boolean test(T t);
????????? Predicate接口:是一个判断接口

public class Tests_filter {
    public static void main(String[] args) {


        // 获取stream流
        Stream<String> stream = Stream.of("张三", "张三四", "王五", "赵六", "张三三", "周八");
        // 需求:过滤处
        stream.filter((String name)->{
            return name.startsWith("张");
        }).forEach((String name)->{
            System.out.println(name);
        });
    }
}

5.limit方法

????? Stream<T>
????? 注意:
????? 参数是一个long类型,如果流的但钱长度大于参数则进行截取;否则不进行操作

public class Tests_limit {
    public static void main(String[] args) {

        // 获取stream流
        Stream<String> stream = Stream.of("张三", "张三四", "王五", "赵六", "张三三", "周八");
        // 需求:保留前3个元素
        stream.limit(3).forEach((String name) -> {
            System.out.println(name);
        });
        System.out.println("===========================");
        // 如果流的获取长度 大于 流当前的长度,则不操作

        stream.limit(10).forEach(name-> System.out.println(name)); // 异常: stream has already
                                                // been operated upon or closed 流已被操作或关闭

        Stream<String> stream1 = Stream.of("张三", "张三四", "王五", "赵六", "张三三", "周八");
        stream1.limit(10).forEach(name-> System.out.println(name));
        
    }
}

6.skip方法:

????? Stream<T> skip(long n);???? 跳过前几个元素
????? 注意:
????????? 如果流的当前长度大于 n,则跳过前n个,否则将会得到一个长度为0的空流

public class Tests_skip {
    public static void main(String[] args) {

        // 获取stream流
        Stream<String> stream = Stream.of("张三", "张三四", "王五", "赵六", "张三三", "周八");
        // 需求:跳过前3个
        stream.skip(3).forEach(name-> System.out.println(name));
    }
}

7.map方法

????? <R> Stream<R> map(Function<? super T, ? extends R> mapper);
????????? 参数 Function<T,R>:函数式接口,抽象方法: R apply(T t);
????????????? Function<T,R>:其实就是一个类型转换接口(T和R的类型可以一致,也可以不一致)

public class Tests_map {
    public static void main(String[] args) {


        // 获取stream流
        Stream<String> stream1 = Stream.of("11", "22", "33", "44", "55");
        // 需求:把stream1流中的元素转换为int类型
        stream1.map((String s)-> Integer.parseInt(s)).forEach((Integer i)->System.out.println(i));

        // 需求:把stream2流中的元素转换为String类型
        Stream<String> stream2 = Stream.of("11", "22", "33", "44", "55");
        stream2.map((String s) ->
        {return s+"";   // 将流中的String类型的元素进行加工,拼接操作,返回String类型的元素的流
        }).forEach(s -> {
            System.out.println(s);});   // 将流中的String类型元素逐一输出

    }
}

8.concat方法

????? public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)
????????? --> 合并两个流

public class Tests_concat {
    public static void main(String[] args) {


        Stream<String> stream1 = Stream.of("张三", "张三四", "王五", "赵六", "张三三", "周八");
        Stream<String> stream2 = Stream.of("11", "22", "33", "44", "55");
        // 需求:合并两个流
        Stream<String> concat = Stream.concat(stream1, stream2);
        concat.forEach(name-> System.out.println(name));
    }
}

9.收集Stream流

Stream流中提供了一个方法,可以把流中的数据手机到单列集合中:
????? <R, A> R collect(Collector<? super T, A, R> collector);???? 把流中的数据手机到单列集合中
????????? 返回值类型是R。R指定为什么类型,就是手机到什么类型的集合
????????? 参数Collector<? super T, A, R>中的R类型,决定把流中的元素收集到哪个集合中
????????? 参数Collector如何得到 ?,可以使用 java.util.stream.Collectors工具类中的静态方法:
????????????? - public static <T> Collector<T, ?, List<T>> toList():转换为List集合
????????????? - public static <T> Collector<T, ?, Set<T>> toSet() :转换为Set集合

public class Tests {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("张三四");
        list.add("王五");
        list.add("赵六");
        list.add("张三三");
        list.add("周八");
        // 需求:过滤出姓张的并且长度为3的元素

        Stream<String> stream1 = list.stream().filter(name -> name.startsWith("张")).filter(name -> name.length() == 3);

        // stream 收集到单列集合中
        List<String> list1 = stream1.collect(Collectors.toList());
        System.out.println(list1);

        // stream 手机到单列集合中
        Set<String> set1 = stream1.collect(Collectors.toSet());
        System.out.println(set1);
    }
}

Stream流中一个方法
????? Object[] toArray(); 返回一个包含此流的元素的数组

public class Tests2 {
    public static void main(String[] args) {

        List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("张三四");
        list.add("王五");
        list.add("赵六");
        list.add("张三三");
        list.add("周八");
        Stream<String> stream = list.stream().filter(name -> name.length() == 3).filter(name -> name.startsWith("张"));
        // 将stream流中的元素转成Array数组对象
        Object[] arr = stream.toArray();
        System.out.println(Arrays.toString(arr));
    }
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 11:46:23  更:2021-09-03 11:46:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:54:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码