java stream如何使用


今天小编给大家分享一下java stream如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。我喜欢用google的集合工具类,让我构造测试数据更简便。然后也用lombok,依赖:User类Address类,注意:这个类在后续的测试中要改动数据准备,stream流、方法引用、lambda那些前置知识咱们就不说了哈,直接上手,先体直观的验一下排序很简单,也没啥难理解的,就是排序排序的初体验之后,我们来看看几种正式场景下的使用在上面的体验排序中,排序的结果默认都是升序的,那如果我要降序呢?那怎么办?有三种方式,或者三种写法根据user中的age降序根据User中age先排序,默认情况下是升序,然后再逆序一下,就变成了降序。但是这样有点不好,因为是先排序然后在逆序的,要两步操作。根据user中的age降序这种方式原理和和方法1差不多,只是写法不一样方式1和方式2都是利用sorted默认序,然后再逆序来实现排序的,这样会有两个步骤,先升序,然后再逆序。难道就没有直接按照降序来排序的方法?肯定是有的。既然是排序,肯定是可以指定规则的按照年龄降序这种方式是通过Integer中的compareTo方法来实现降序的,当然也可以自己实现,只不过age是Integer类型,既然Integer中已经实现两个Integer比较的方法,就可以偷个懒比较实际的最终结果就是返回一个数字,大于0、小于0、等于0,分别就代表大于、小于、等于,所以在sorted方法中返回一个做减法的数字即可。比如我现在的需求是先按照年龄降序,年龄相同的再按照名字降序thenComparing顾名思义,再比较放在以前,我肯定会从stream 排序的api说起,看看有哪些方法,再看怎么调用,但是这流式太过抽象,所以我先讲了怎么用,再回头来看看有哪些api,本质是什么在java.util.stream.Stream中,sorted方法有两个重载形式一个是无参,一个是需要一个参数java.util.Comparator。其实这两个方法我们都用过,在初体验中,第一个就是无参的,这样会根据默认规则排序,至于默认规则是什么,就是排序对象实现的java.lang.Comparable接口中的免费云主机域名compareTo方法,不然你试试跑一下这个直接报错,报错的原因就是,你要排序一堆User,但是sorted这个无参的方法不知道排序的规则是什么。所以,在使用这个无参的方法时,被排序的元素必须得实现java.lang.Comparable接口,来指定排序规则。除了初体验中的第一个排序,其他的全都是使用的这个方法,很神奇是吧?我好像传的参数不止这样。但事实上就是这样子,只传了这个一个参数,无非有两种传参形式:一种是确确实实的传了一个java.util.Comparator进去,另外一种是自己实现了java.util.Comparator中的抽象方法compare,这个方法用来进行元素间的比较。因为java.util.Comparator是一个函数式接口,接口中只有compare这一个抽象方法,所以可以结合lambda表达式使用。我们使用的.sorted(Comparator.comparing(……))其实就是直接传了一个Comparator进去,因为Comparator.comparing这个方法:java.util.Comparator#comparing(java.util.function.Function super T,? extends U>, java.util.Comparator super U>) 返回的就是一个Comparator。而类似这种使用:sorted((x, y) -> y.getAge().compareTo(x.getAge()))或者sorted((x, y) -> y.getAge() – x.getAge()),其实就是我们自己在实现java.util.Comparator中的抽象方法compare,这其实就是匿名内部类—->简化—->lambda表达式的这么一个过程,其实还可以简化成 方法引用。以上就是“java stream如何使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。

相关推荐: javascript如何设置td的bgcolor背景颜色

本文小编为大家详细介绍“javascript如何设置td的bgcolor背景颜色”,内容详细,步骤清晰,细节处理妥当,希望这篇“javascript如何设置td的bgcolor背景颜色”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 …

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/15 15:43
下一篇 02/15 15:43

相关推荐