龙空技术网

这马上就java21了,赶快学会Lambda表达式

莱迪娜的风声 840

前言:

今天大家对“java条件表达式”可能比较注重,各位老铁们都想要知道一些“java条件表达式”的相关内容。那么小编在网摘上汇集了一些对于“java条件表达式””的相关资讯,希望小伙伴们能喜欢,各位老铁们一起来学习一下吧!

其实一直以来,我用lambda用的都不多的。这是实话,但我也确实看到很多Java代码都在使用lambda表达式。所以还是决定过一下这个东西。很多人提到这个lambda表达式不好理解,确实是那么回事儿。我在写java代码的时候不会刻意使用lambda表达式的方式,很多使用只有一个方法的接口的地方我都是直接new。这样很容易阅读,但因为别人使用,为了不在查看别人的代码时拖后腿,我们有必要认真学习。

我将第一张图片修改了一下,这是几种不同的输出方式。第一个在mani方法中的写法就是方法引用形式。这种形式比lambda还要简洁,我们直接使用双冒号传递一个函数就行。那method2我们还需要定义参数,然后调用println来接收参数。那么在什么情况下我们可以使用方法引用呢?是不是所有的方法都是直接引用?不是如此,方法的引用是有条件的。最重要的一点就是被引用的方法必须与函数式接口的抽象方法的参数类型和数量,以及返回值类型相匹配。不然你不匹配,肯定会报错的。

刚刚我们使用lambda的场景是输出语句,但是在实际应用中这个场景是复杂的。看下图我们接下来对于元素进行排序比较的一个操作。直接使用new的方式一目了然,但是确实比较占代码行一些。而使用lambda我们则直接放入两个变量,然后传入到方法块中。要明白的是这里的两个变量其实就是方法的参数,之所以没有定义类型,是因为他们的类型就是方法的参数的类型,lambda直接省略了类型,然后加个破折号箭头后面直接跟语句块,注意多行语句可以使用大括号括起来。很简单的这个操作就完成了。

如果说刚刚的是比较排序,那么下面的就是排序,在这里我们使用了一个stream流,这个stream其实不好理解。还是和前面一样我们来抽丝剥茧,看下一张图片

进入这个stream我们才知道,原来这个stream也是接口,类似于List、Map这样的一个东西。那么既然有接口就肯定有实现类,我们去找它的实现类。先从list.stream中进入

通过一层一层的进去之后,我们定位到了一个抽象类ReferencePipeline,仅看字面意思是引用管道的意思。那Stream是流的意思,实现类使用引用管道这个字面意思也算说的过去。了解到了这些基础知识之后,我们明白了Stream并不是凭空出现的一个东西,它有它的接口,有它的实现类,有它的实现方法。

回到Demo中,我尝试直接New一个Stream来实现,但这是不现实的,里面有太多的方法需要我们实现,因此我们需要已经实现了方法的实体类来传入参数。

首先我们要知道Stream的实现方式,或者说如何获取,或者构建一个Stream。我这边专门统计了一下,你想通过一个类来构建一个Stream是不可能的,即使比较靠谱的ReferencePipeline这个抽象类,它本身也是非public的。也就是说我们根本无法访问到这个类。所以我们只能通过jdk自身提供的Stream的实例方法来获取Stream。诸如list的stream方法,Stream.Builder的方式构建;使用Arrays类的stream方法来将数组转换为Stream;使用Stream类提供的generate方法和iterate方法来实现Stream等

了解完这些之后,我们就对Stream有了一个立体的形象上的了解。知道Stream反正就是一个孤家寡人,所有的操作基本都通过Stream这个接口来完成,因为接口中是有默认方法的,所以很多操作我们都通过调用Stream接口的默认方法来完成。比如说什么filter过滤、map,以及刚刚接触的forEach。也就是说我们需要学习的其实就是这些方法的使用

我们接下来来看看Stream的filter,过完这里咱们这次的解说就结束。先看不使用lambda的方式,很显然一目了然,我知道只要不符合条件的都返回false,符合条件的返回true,那这样就过滤了。通过lambda表达式,我们只需要一个String 参数变量,以及对这个变量的操作,如果s以字符串a

开头则返回true,否则false,写习惯了,也很容易理解的。咱们到这儿就结束了,如果这些内容对你有帮助,欢迎点赞收藏评论关注

标签: #java条件表达式