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);
        });
    }
相关推荐
ha20428941941 天前
Linux操作系统学习之---线程控制
java·linux·学习
Knight_AL1 天前
Spring AOP 中@annotation的两种写法详解
java·spring
某空m1 天前
【Android】BottomNavigationView实现底部导航栏
android·java
顾漂亮1 天前
Spring AOP 实战案例+避坑指南
java·后端·spring
SimonKing1 天前
Mybatis-Plus的竞争对手来了,试试 MyBatis-Flex
java·后端·程序员
光军oi1 天前
JAVA全栈JVM篇————初识JVM
java·开发语言·jvm
我命由我123451 天前
PDFBox - PDFBox 加载 PDF 异常清单(数据为 null、数据为空、数据异常、文件为 null、文件不存在、文件异常)
java·服务器·后端·java-ee·pdf·intellij-idea·intellij idea
7哥♡ۣۖᝰꫛꫀꪝۣℋ1 天前
Spring Boot
java·spring boot·后端
Moniane1 天前
C++深度解析:从核心特性到现代编程实践
java·开发语言·jvm
攻城狮CSU1 天前
C# 数据加载专题 之泛型序列化
java·servlet·c#