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);
        });
    }
相关推荐
Mahir082 小时前
Spring 循环依赖深度解密:从问题本质到三级缓存源码级解析
java·后端·spring·缓存·面试·循环依赖·三级缓存
RyFit3 小时前
SpringAI 常见问题及解决方案大全
java·ai
石山代码3 小时前
C++ 内存分区 堆区
java·开发语言·c++
绝知此事4 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
无风听海4 小时前
C# 隐式转换深度解析
java·开发语言·c#
一只大袋鼠4 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
德思特5 小时前
从 Dify 配置页理解 RAG 的重要参数
java·人工智能·llm·dify·rag
YOU OU6 小时前
Spring IoC&DI
java·数据库·spring
один but you6 小时前
从可变参数到 emplace:现代 C++ 性能优化的核心组合
java·开发语言
是码龙不是码农6 小时前
ThreadPoolExecutor 7 个核心参数详解
java·线程池·threadpool