java8新特性stream api如何使用

2025-10-27 20:41:02

1、介绍步骤还是结合例子来说明更容易理解一点,首先创建个List集合对象实例,添加4个用来测试的学生实例

List<Student> students = new ArrayList<Student>();

students.add(new Student("Tom", 12, "male", 5));

students.add(new Student("Lili", 11, "female", 4));

students.add(new Student("John", 8, "male", 1));

students.add(new Student("Lucy", 10, "female", 3));

System.out.println("所有学生:");

students.forEach((p) -> System.out.printf("%s;", p.getName()));

先运行下,打印出所有学生名字

java8新特性stream api如何使用

2、filter的使用例子,filter对stream按照一定的条件进行过滤,生成一个新的stream

本例中,按照学生年龄进行过滤,过滤年龄大于10岁的学生

System.out.println("下面是年龄大于10岁,年级大于4的学生:");

students.stream()

        .filter((p) -> (p.getAge() > 10))

        .filter((p) -> (p.getGrade() > 4))

        .forEach((p) -> System.out.printf("%s;", p.getName()));

System.out.println();

运行结果如下,打印出大于10岁,年级大于4的是Tom

java8新特性stream api如何使用

3、limit/skip,limit返回前n个元素,skip则是跳过前n个元素

System.out.println("最前面2个学生:");

students.stream()

        .limit(2)

        .forEach((p) -> System.out.printf("%s;", p.getName()));

System.out.println();

System.out.println("跳过前面2个学生:");

students.stream()

        .skip(2)

        .forEach((p) -> System.out.printf("%s;", p.getName()));

System.out.println();

运行结果如下:

java8新特性stream api如何使用

4、max/min,max可以取年龄或者年级最大的元素,min可以取年龄或者年级最小的元素

System.out.println("年龄最大的学生:");

System.out.println(students.stream()

        .max((p1, p2) -> (p1.getAge() - p2.getAge()))

        .get().getName());

System.out.println("年龄最小的学生:");

System.out.println(students.stream()

        .min((p1, p2) -> (p1.getAge() - p2.getAge()))

        .get().getName());

java8新特性stream api如何使用

5、parallel并行模式,对于大数据量非常有用,mapToInt作用是把学生的年龄映射成int的stream,sum是计算总和

System.out.println("所有学生年龄总和:");

System.out.println(students.stream().parallel().mapToInt(Student::getAge).sum());

运行结果如下,年龄总和为41

java8新特性stream api如何使用

6、数值流的构造

System.out.println("数据流的构造:");

IntStream.of(new int[]{1, 2, 3}).forEach(System.out::println);

IntStream.range(1, 3).forEach(System.out::println);

IntStream.rangeClosed(1, 3).forEach(System.out::println);

rangeClosed从打印结果可以看出,是闭区间范围

java8新特性stream api如何使用

7、流转换为其它数据结构,有兴趣的可以参考下面的例子测试下结果

java8新特性stream api如何使用

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢