面试官:会用stream流筛选数据么?我会filter()

目录

为什么使用 Stream 流?

Stream流:

代码示例

使用 Stream 流

使用传统 for 循环

Stream 流用法讲解

常见中间操作

常见终端操作

Stream 流相对于 for 循环的便利之处

总结


为什么使用 Stream 流?

        在日常 Java 开发中,对于集合的处理是非常常见的需求。传统的 for 循环虽然能够满足这一需求,但 JDK 1.8 引入的 Stream 流提供了更为强大、简洁和易读的方式来操作集合。

        在系统中有无数的for循环,每次看for循环都得一步一步看到底循环操作了啥,太烦了。

Stream流:

  1. 简洁性:Stream 流提供了一套丰富的 API,可以通过链式操作(例如:.map().filter())完成多种集合操作,减少了繁琐的迭代和条件判断,代码更加简洁。

  2. 可读性:Stream 流的操作方式更贴近自然语言,让代码更易读、易懂。相较于传统的 for 循环,Stream 流更注重描述你想要实现的目标,而不是过程。例如:看到.filter()就知道是在筛选,看到.collect()就知道在生成集合。

  3. 并行处理:Stream 流天生支持并行处理,可以更充分地利用多核处理器,提高处理效率,而传统的 for 循环在并发处理上较为繁琐。

代码示例

        考虑一个场景,我们有一个学生列表 List<Student>,现在需要筛选出年龄大于 18 的并且重复的学生姓名,并构成一个新的列表。

使用 Stream 流

List<Student> students = // 从某处获取学生列表
List<Student> adults = students.stream()
    .filter(student -> student.getAge() > 18)
    .distinct()
    .collect(Collectors.toList());

使用传统 for 循环

List<Student> students = // 从某处获取学生列表
List<Student> adults = new ArrayList<>();

for (Student student : students) {
    if (student.getAge() > 18) {
        if (adults.contains(student)){
            adults.add(student);
        }
    }
}

Stream 流用法讲解

常见中间操作

  • filter:筛选元素。

    List<Student> adults = students.stream()
        .filter(student -> student.getAge() > 18)
        .distinct()
        .collect(Collectors.toList());
    
  • map:对元素进行转换。

    List<String> names = students.stream()
        .map(Student::getName)
        .collect(Collectors.toList());
    

常见终端操作

  • collect:将流转换为其他形式,通常是集合。

    List<String> names = students.stream()
        .map(Student::getName)
        .collect(Collectors.toList());
    
  • forEach:遍历流中的元素。

    students.stream()
        .forEach(student -> System.out.println(student.getName()));
    

Stream 流相对于 for 循环的便利之处

  1. 简洁性:Stream 流通过链式操作将多个操作连接在一起,避免了传统 for 循环中的繁琐语法。

  2. 功能性:Stream 提供了丰富的中间操作和终端操作,比如 filter、map、collect 等,能够完成更多高级的集合操作。

  3. 并行处理:Stream 流天生支持并行处理,提高了处理大数据集合时的效率,而 for 循环需要手动处理并发问题。

总结

        通过这个例子,我们清晰地看到了 Stream 流相对于传统 for 循环的优势。在日常开发中,特别是对集合进行筛选、转换、聚合等操作时,Stream 流提供了更为便捷、灵活和高效的方式。当然,在选择使用 Stream 流时,也需要根据实际情况权衡性能和可读性。

        通过逐步深入的讲解,相信读者对 JDK 1.8 中的 Stream 流已经有了更清晰的认识。在实际项目中,合理运用。

 

 推荐阅读:

JSON转日期,变为数字串

 

SQL索引结构、使用、优化-深入浅出

ArrayList(源码分析)—面试经典问题

SpringBoot-AOP深入浅出通俗易懂

 

最后我还整理汇总了⼀些 Java ⾯试相关的⾼质量 PDF 资料和免费Idea账号

公众号:Java小白,回复“⾯试” 和“idea破解”即可获取!

 

  • 27
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

派大星的无情铁锤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值