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);
        });
    }
相关推荐
网安INF4 分钟前
CVE-2020-1938源码分析与漏洞复现(Tomcat 文件包含/读取)
java·网络·web安全·网络安全·tomcat·漏洞复现
nenchoumi311915 分钟前
UE5 学习系列(九)光照系统介绍
java·学习·ue5
张乔2426 分钟前
spring boot项目整合mybatis实现多数据源的配置
java·spring boot·多数据源
GzlAndy30 分钟前
Tomcat调优
java·tomcat
美好的事情能不能发生在我身上33 分钟前
苍穹外卖Day11代码解析以及深入思考
java·spring boot·后端·spring·架构
辉辉健身中39 分钟前
Maven入门(够用)
java·maven
星火飞码iFlyCode1 小时前
【无标题】
java·前端·人工智能·算法
不良手残1 小时前
Redisson + Lettuce 在 Spring Boot 中的最佳实践方案
java·spring boot·redis·后端
YuTaoShao1 小时前
Java八股文——Spring「Spring 篇」
java·数据库·spring
阿维的博客日记1 小时前
说一下Java里面线程池的拒绝策略
java·线程池·拒绝策略