java8-17 --- Stream流

一、StreamAPI实例化

java 复制代码
 /**
     * 通过集合创建Stream流
     */
    @Test
    public void test1(){
        ArrayList<Integer> arrayList = new ArrayList<>();
        //返回一个顺序流
        Stream<Integer> stream = arrayList.stream();
        //返回一个并行流
        Stream<Integer> integerStream = arrayList.parallelStream();
        System.out.println(stream);
        System.out.println(integerStream);
    }

    /**
     * 通过数组创建Stream流
     */
    @Test
    public void test2(){
        //返回一个流
        Integer[] arr = {1,2,3,4};
        Stream<Integer> stream = Arrays.stream(arr);
    }
    /**
     * 通过of()创建Stream流
     */
    @Test
    public void test3(){
        Stream<String> stream = Stream.of("aa", "bb", "cc", "dd");
    }

二、StreamAPI中间操作

java 复制代码
/**
     * 筛选与切片
     */
    @Test
    public void test4(){
        //接收lambda从流中排除某些元素
        ArrayList<Integer> arrayList = new ArrayList<>();
        for (int i = 1; i <= 10 ; i++) {
            arrayList.add(i);
        }
        //filter()过滤操作
        arrayList.stream().filter(integer -> integer > 5).forEach(System.out :: println);
        //limit() --- 截断流,使其元素不超过给定数量
        arrayList.stream().limit(2).forEach(System.out :: println);
        //skip() --- 跳过元素,返回一个扔掉了前n个元素
        arrayList.stream().skip(5).forEach(System.out :: println);
        //distinct() --- 筛选,通过流所生成元素的hashCode() 和 equals() 去除重复元素
        arrayList.add(5);
        arrayList.add(6);
        arrayList.add(8);
        arrayList.stream().distinct().forEach(System.out :: println);
    }

    /**
     * 映射
     */
    @Test
    public void test5(){
        //map() --- 接收一个函数作为参数
        List<String> list = Arrays.asList("aa", "bb", "cc");
        list.stream().map(str -> str.toUpperCase()).forEach(System.out :: println);
    }

    /**
     * 排序
     */
    @Test
    public void test6(){
        //sorted() --- 自然排序
        List<Integer> list = Arrays.asList(12, 23, 1, 56, 23);
        list.stream().sorted().forEach(System.out :: println);
        //定制排序
        list.stream().sorted((o1, o2) -> o1 - o2).forEach(System.out :: println);
    }

三、终止操作

java 复制代码
@Test
    public void test7(){
        //allMatch() --- 检查所有元素是否匹配
        List<Integer> list = Arrays.asList(12, 34, 1, 45);
        System.out.println(list.stream().allMatch(Integer -> Integer > 12));
        //anyMatch() --- 检查是否至少匹配一个元素
        System.out.println(list.stream().anyMatch(Integer -> Integer > 23));
        //findFirst() --- 返回第一个元素
        System.out.println(list.stream().findFirst().get());
        //count() --- 返回流中元素的总个数
        System.out.println(list.stream().count());
        //max() --- 返回流中最大值
        System.out.println(list.stream().max((o1, o2) -> Integer.compare(o1, o2)).get());
        //min() --- 返回流中最小值
        System.out.println(list.stream().min((o1, o2) -> Integer.compare(o1, o2)).get());
        //forEach() --- 遍历集合
        list.forEach(integer -> {
            System.out.println(integer);
        });
        //reduce() --- 将流中元素反复结合起来,得到一个值
        System.out.println(list.stream().reduce(0, (o1, o2) -> o1 + o2));
        //
        List<Integer> collect = list.stream().filter(Integer -> Integer > 23).collect(Collectors.toList());
        collect.forEach(a ->{
            System.out.println(a);
        });
    }
相关推荐
xbgRS2 小时前
springboot的自动装配
java·spring boot
嘻哈∠※9 小时前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端
白狐_79810 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander25811 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
码匠许师傅11 小时前
【C++ 面试真题】聊聊 C++ 的拷贝构造与拷贝赋值
java·c++·面试
极创信息13 小时前
系统安全隐患全方位排查方案:标准化渗透测试全流程
java·opencv·struts·数据挖掘·eclipse·语音识别·hibernate
汉字萌萌哒13 小时前
2019CCF-CSP入门级C++试题解析
java·开发语言·c++
喜欢的名字被抢了14 小时前
程序出问题怎么查,以及如何让它不掉线
java·运维·数据库
数据知道14 小时前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php
2601_9499506315 小时前
Java 面试准备,用练题簿把“背过八股”变成“真正会答”
java·开发语言·面试·刷题·小程序推荐