Java取对象中年龄最大的那个_Java8怎么从流中获取最大值、最小值

继续来写Java8开始的流式编码。

今天要写的是怎么从流中获取最大值、最小值。

a49476aaba7b3c69f49a5cf4ca49f6cc.png

为了方便没有看过前面文章的朋友,用到的类和数据,还是贴出来一下。

d6bb8be14d2dd0f98cdaa7187d98e703.png

上面准备了一组Student对象组合的List集合。

我们先来看看怎么从集合转换成流中取出年龄最大的Student对象。

36c09a8124805b762f1bedbfb57a7ad9.png

年龄最大的是一个性别为男,年龄为15的Student对象,执行一下,看看是不是获取到这样的结果了。

c68f84725af45339f9056ad7b0d0b4c8.png

成功地获取到了年龄最大的Student对象。

大家有没有注意到示例代码中“max((o1, o2) -> o1.getAge()-o2.getAge())”部分被idea做了波浪线标记。这是告诉我们这里可以替换更好的写法。

来看一下能替换成什么吧。

2abf29918654017f6469ed8b8bcad561.png

执行时可以得到一样的结果。

看了上面的代码示例,通过流的方式获取集合中年龄最小的Student对象,想必大家已经知道该怎么写了吧。

对,就是下面这样了。

6e5415601d17154e185fca9f2f1d5ccd.png

只需要把max方法改为min方法就可以了。就可以获取到年龄最小的的Student对象了。

在《java中有没有类似sql的group by的功能呢》写了通过java的流的方式实现类似sql的group by的功能。sql的group by时,可以对每个分组取最大值,最小值。这样的功能在java中能通过流实现吗?

来,实际操作一下。

ea294997054f0a55655becf62dd7545c.png

这个就比上面的代码要稍微复杂一些了。其中“Collectors.groupingBy”方法有两个参数,第一个参数是用来描述收集后Map的key的取值,第二个参数是用来表示收集后Map的value的取值。

这里为什么不是直接用“Collectors.maxBy”,而是又在“Collectors.maxBy”外面包了一层“Collectors.collectingAndThen”方法呢。

其原因是因为通过“Collectors.maxBy”来获取Map的value,得到的是Optional类型的value。像下面这样。

adbc2881ab7c25e5bbb4fc7d148bff97.png

执行结果我就不再赘述了。有兴趣的朋友可以自己执行一下看看。

至于通过对流进行操作获取分组后每组的最小值,大家通过上面的例子应该也知道怎么写了吧。是的,就是把“Collectors.maxBy”方法改为“Collectors.minBy”方法就可以了。

今天的内容相比较前几天的可能稍微会复杂一点,初次接触的朋友慢慢体会一下。今天就先到这里了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值