# JDK1,面试字节跳动Java研发岗

过滤:stream的filter方法

其需要的参数为一个Predicate接口(四大函数接口之一),就是一个判断接口!从流中可以去除某些元素

截断:stream的limit方法

截断流可以让元素不超过给定数量,本质上就是限制了内部迭代的次数!并且要注意,多个流水操作只会迭代一次,比如使用了filter再进行limit,不会filter迭代一次,然后limit迭代一次!!!只会两个流水操作同时进行迭代,这个过程称为短路,可以进行提高效率的!一旦发现满足条件的数据就直接返回

跳过:stream的skip方法

返回一个扔掉了前n个元素的流,若流中的元素不足n个,则会返回一个空流

筛选:stream的distinct方法

可以使用distinct来进行去重,本质上是通过流所生成元素的hashCode和equals方法进行去除重复元素的,所以使用这个方法要重写hashCode和equals方法

映射

这里要清楚,集合或数组得到的Stream,本质上是Stream,即里面的元素就是一个Stream,而外层的那个容器也是Stream,里面装有元素Stream

映射对应的方法就是stream的map方法

将元素转化成其他形式或者提取形式,本质上是接受一个函数(Function接口,四大函数式接口之一)作为参数,然后这个函数会被作用到流中的每个元素,从而产生一个新元素!(传递的Function接口的返回值就变成一个新元素)

还有另外一个方法是flatMap

map的作用是对流中的每一个元素进行操作,从而产生一个新元素,所以map返回的stream是元素组合为Stream,而flatMap,仍是是对流中的每一个元素进行操作,但产生的所有新元素会被组合成一个新元素,也就是flatMap的stream是一个元素!即返回一个Stream

排序

排序总共有两种

  • 自然排序:Comparable(内部排序,类实现Comparable接口,实现comparaTo方法)

  • 定制排序:Comparator(外部排序,创建Comparator接口实现类,也是一个函数式接口)

对应的方法为sorted

默认无参就是自然排序,给了Lambda表达式实现Comparator就是定制排序

中止操作

前面提到过,获取了Stream进行中间操作时,是不会立刻执行的,只有等中止操作发生了之后,所有的中间操作才会执行

基本的中止操作有下面几种

  • allMatch:检查是否匹配所有元素

  • anyMatch:检查是否至少匹配一个元素

  • noneMatch:检查是否没有匹配所有元素

  • findFirst:返回第一个元素

  • findAny:返回当前流中的任意一个元素

  • count:返回流中元素的总个数

  • max:返回流中的最大值

  • min:返回流中最小值

allMatch

参数需要一个predicate接口(四大函数式接口之一,用于判断)!

该操作用于判断是否所有元素都符合规则

anyMatch

与allMatch使用方式相同,不过该操作用于判断是否有元素符合规则(只要存在一个)

noneMatch

使用方式一致,用于判断是否所有元素都不符合规则!

findFirst

返回处理Stream后的第一个结果,返回一个Optional对象,Optional是一个容器,这也是JDK8的一个新特性,用来避免返回对象为空的,只要有可能为空,就一定会封装在Optional中!并且能用其orElse方法来进行替换空

使用get方法就能取出里面的对象

findAny

返回处理Stream后的随便一个结果,同理也是返回一个Optional对象

count

返回流中元素的总个数

max

返回流中的最大值,并且使用定制排序,即Compartor接口

min

与max同样使用,只不过是获取最小的,同理使用定制排序

下面来看一下特殊的中止操作

归约与收集
归约

归约可以将流中元素反复结合起来,从而可以得到一个值,其实本质上就是一个循环遍历Stream的元素,第一个元素与起始值做了指定运算后,其结果会与下一个元素继续做指定运算,其实跟result += result类似

在这里插入图片描述

上面这段代码就是做了一个累加的操作,从0+1+。。。+10

首先第一次起始值0作为x,第一个元素1作为y,第二次就是第一次的结果作为x,第二个元素2作为y

有了归约就可以进行聚合运算了!替代mysql的group函数做聚合操作

在这里插入图片描述

可以看到,假如没有给reduce初始值,那就有可能为空,就会返回一个Optional对象,其必须给的参数是一个BinaryOperator函数式接口,也就是二元运算接口

map-reduce模式

使用map进行提取,然后使用reduce进行归约操作,在大数据方面经常使用

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

学习分享,共勉

这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!

资料整理不易,读者朋友可以转发分享下!

Java核心知识体系笔记.pdf

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

中高级Java开发面试高频考点题笔记300道.pdf

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

架构进阶面试专题及架构学习笔记脑图

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

Java架构进阶学习视频分享

资料整理不易,读者朋友可以转发分享下!*

Java核心知识体系笔记.pdf

[外链图片转存中…(img-y3fiERTw-1710390993795)]

中高级Java开发面试高频考点题笔记300道.pdf

[外链图片转存中…(img-m5ctl8ZK-1710390993796)]

架构进阶面试专题及架构学习笔记脑图

[外链图片转存中…(img-P2nw726B-1710390993796)]

Java架构进阶学习视频分享

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值