千家信息网

Java8中Stream的筛选,切片与映射怎么用

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章将为大家详细讲解有关Java8中Stream的筛选,切片与映射怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用Stream的三个操作步骤创建Stre
千家信息网最后更新 2025年01月19日Java8中Stream的筛选,切片与映射怎么用

这篇文章将为大家详细讲解有关Java8中Stream的筛选,切片与映射怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

使用Stream的三个操作步骤
  1. 创建Stream

  2. 中间操作

  3. 终止操作(终端操作)

    @Testpublic void test1(){    //创建Stream    //1.可以通过Collection系列集合提供的stream()获取串行流或parallelStream()获取并行流    List list = new ArrayList<>();    Stream stream1 = list.stream();    //2.通过Arrays中的静态方法stream()获取数组流    Employee[] emps = new Employee[10];    Stream stream2 = Arrays.stream(emps);    //3.通过Stream类中的静态方法of()    Stream stream3 = Stream.of("aa", "bb", "cc");    //4.创建无限流    //通过迭代创建无限流    Stream stream4 = Stream.iterate(0, (x) -> x + 2);    //中间操作和终止操作    stream4.limit(10).forEach(System.out::println);    //通过生成随机数创建无限流    Stream.generate(() -> Math.random())            .limit(5)            .forEach(System.out::println);}
    内部迭代与外部迭代

    内部迭代:迭代操作由Stream API自己完成
    外部迭代:由自己写的程序完成

    //内部迭代:迭代操作由Stream API完成@Testpublic void test1(){    //中间操作:不会执行任何操作    Stream employeeStream = employees.stream()                                                .filter((e) -> {                                                    System.out.println("Stream API的中间操作");                                                    return e.getAge() > 35;                                                });    //终止操作:一次性执行全部内容,即"惰性求值"    employeeStream.forEach(System.out::println);}//外部迭代@Testpublic void test2(){    Iterator iterator = employees.iterator();    while (iterator.hasNext()){        System.out.println(iterator.next());    }}
    筛选与切片的用法
  4. filter---接收Lambda,从流中排除某些元素

  5. limit---截断流,使其元素不超过给定的数量

  6. skip(n)---跳过元素,返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空流,与limit(n)互补

  7. distinct---筛选,通过流所生成元素的hashCode( )和equals( )去除重复元素

    List employees = Arrays.asList(        new Employee("张三", 18 ,9999.99),        new Employee("李四", 38, 5555.99),        new Employee("王五", 50, 6666.66),        new Employee("赵六", 16, 3333.33),        new Employee("田七", 8, 7777.77),        new Employee("田七", 8, 7777.77),        new Employee("田七", 8, 7777.77));@Testpublic void test3(){    employees.stream()             .filter((e) -> {                 System.out.println("短路");                 return e.getSalary() > 5000;             })             .limit(2)             .forEach(System.out::println);}@Testpublic void test4(){    employees.stream()             .filter((e) -> e.getSalary() > 5000)             .skip(2)             .forEach(System.out::println);}@Testpublic void test5(){    employees.stream()            .filter((e) -> e.getSalary() > 5000)            .skip(2)            .distinct()            .forEach(System.out::println);}
    映射的用法
  8. map---接收Lambda,将元素转换成其他形式或提取信息。接收一个函数作为参数,该参数会被应用到每个元素上,并将其映射成一个新的元素。

  9. flatMap---接收一个函数作为参数,将流中的每个值换成另一个流,然后把所有流连接成一个流

    public static Stream filterCharacter(String str){    List list = new ArrayList<>();    for (Character ch : str.toCharArray()){        list.add(ch);    }    return list.stream();}@Testpublic void test6(){    List list = Arrays.asList("aaa", "bbb", "ccc", "ddd", "eee");    list.stream()        .map((str) -> str.toUpperCase())        .forEach(System.out::println);    System.out.println("----------------------------");    employees.stream()             .map(Employee::getName)             .forEach(System.out::println);    System.out.println("-----------------------------");    Stream> stream = list.stream()            .map(TestStreamAPI2::filterCharacter);//{{a, a, a}, {b, b, b}}    stream.forEach((sm) -> {        sm.forEach(System.out::println);    });    System.out.println("--------------------------------");    Stream sm = list.stream()            .flatMap(TestStreamAPI2::filterCharacter);//{a, a, a, b, b, b}    sm.forEach(System.out::println);}

关于"Java8中Stream的筛选,切片与映射怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0