java8中stream流的使用教程及演示样例

【饿了么、美团】外卖红包领取地址 >> 能省一点是一点

java8引入了stream流的特性,在对集合数据的处理上能够带来很大的便利性。虽然我一开始看到别人使用stream流的代码时我也是一脸懵逼不懂什么意思,于是我花了点时间学习了下,并简单记录下java8中流的使用以及自己的一些代码测试样例。

java8中流提供了很多方法,常用的方法有如下几个:

  • stream() 为集合创建串行流(比较常用)
  • parallelStream() 为集合创建并行流
  • forEach() 迭代数据
  • map() 用于映射每个元素到对应的结果
  • filter() 用于通过设置的条件过滤出元素
  • limit() 用于获取指定数量的流
  • sorted() 用于对流进行排序
  • collect() 用于跟Collectors类配合实现将流转换成集合或聚合元素

直接看方法肯定是一脸懵逼,所以可以复制下方代码到编辑器中自己实际操作一下能更好的理解并学会使用。

public class Test {

    public static void main(String[] args) {
        List res;
        //获取数据
        List<User> list = getList();

        System.out.println("场景1:打印每个用户的信息");
        //场景一单独抽出成方法,方便后续查看结果调用
        printList(list);

        System.out.println("场景2:根据年龄排序(升序)");
        res = list.stream()
                .sorted(Comparator.comparing(User::getAge))
                .collect(Collectors.toList());
        printList(res);

        System.out.println("场景3:根据年龄排序(降序)");
        res = list.stream()
                .sorted(Comparator.comparing(User::getAge).reversed())
                .collect(Collectors.toList());
        printList(res);

        System.out.println("场景4:取年龄最小的前3个用户");
        res = list.stream()
                .sorted(Comparator.comparing(User::getAge))
                .limit(3)
                .collect(Collectors.toList());
        printList(res);

        System.out.println("场景5:选出已经成年(年龄>=18)的用户");
        res = list.stream()
                .filter(e -> e.getAge() >= 18)
                .collect(Collectors.toList());
        printList(res);

        System.out.println("场景6:提取所有人的姓名");
        res = list.stream()
                .map(User::getName)
                .collect(Collectors.toList());
        printList(res);

        System.out.println("场景7:计算所有人的年龄之和");
        Integer reduce = list.stream()
                .map(User::getAge)
                .reduce(0, (a, b) -> a + b);
        System.out.println("年龄之和:" + reduce);
        System.out.println("==============\n");

    }

    private static List<User> getList() {
        return Arrays.asList(
                new User("小赵",20),
                new User("小钱",9),
                new User("小孙",18),
                new User("小李",13)
        );
    }

    private static void printList(List list){
        list.forEach(System.out::println);
        System.out.println("==============\n");
    }

}

@Data
@ToString
@AllArgsConstructor
class User{

    /**
     * 姓名
     */
    private String name;

    /**
     * 年龄
     */
    private Integer age;

}

代码说明:
User类是一个用户类,为了方便使用了Lombok注解
getList()方法用于创造一个用户list数据
printList()方法使用forEach对集合进行遍历打印,方便查看结果

上述代码执行结果:

场景1:打印每个用户的信息
User(name=小赵, age=20)
User(name=小钱, age=9)
User(name=小孙, age=18)
User(name=小李, age=13)
==============

场景2:根据年龄排序(升序)
User(name=小钱, age=9)
User(name=小李, age=13)
User(name=小孙, age=18)
User(name=小赵, age=20)
==============

场景3:根据年龄排序(降序)
User(name=小赵, age=20)
User(name=小孙, age=18)
User(name=小李, age=13)
User(name=小钱, age=9)
==============

场景4:取年龄最小的前3个用户
User(name=小钱, age=9)
User(name=小李, age=13)
User(name=小孙, age=18)
==============

场景5:选出已经成年(年龄>=18)的用户
User(name=小赵, age=20)
User(name=小孙, age=18)
==============

场景6:提取所有人的姓名
小赵
小钱
小孙
小李
==============

场景7:计算所有人的年龄之和
年龄之和:60
==============

总结:Java8的流操作,真香!


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍

IAM City Farmer 猫薄荷 可降解花盆套装 猫咪猫草 四季好种 儿童幼儿园种植小盆栽
¥16.20
京祝 儿童口罩3-6岁医用独立包装口罩3d立体一次性防尘防护透气 挖掘机 10枚装
¥19.00
欢乐家 草莓罐头256gX6罐新鲜糖水烘焙原料草莓罐头水果整箱
¥33.80
金冠【国民好物】婚庆喜糖果500g 多品类订结婚满月伴手回礼喜枣年货 家有喜事(500g/约40支)
¥19.80
忆丝芸洗发水450ml(女士蓬松洗头膏持久留香洗头水护色锁色修护) 香氛柔顺护发素
¥49.90
六品书院簪花小楷钢笔式毛笔专用字帖书法初学者入门套装软笔练字帖毛笔套装初学临摹字帖宣纸唐诗书法练习纸
¥38.50
百科全书 彩色注音精装版 随书赠送考点手册 小学生必读科学知识课外读物
¥21.50
毕亚兹 粘毛器 大号24cm 宠物猫狗除毛器 衣服被褥去毛发清洁神器 滚筒可撕式粘尘纸55撕【1短柄+3卷纸】
¥25.90