java8新特性以及原因_java8系列之新特性Lambda引入原因分析

引言:虽然JDK11已经进入特性冻结状态,但是从我自身来讲,目前JDK8 Lambda、Stream的使用率还不算很高,这些都是很好用的API哎!那就重新总结一波,同时也帮助小伙伴们熟悉一下,一起使用Lambda、Stream!

摘要:本文旨在帮助大家了解Lambda的引入原因以及使用方法,是自己看过《java8 实战》的总结,有什么疑问,可以评论,也可以翻看《java8 实战》自己摸索。如果文中有错误,望不吝赐教。

咱们做开发的,最不想看到的局面就是需求频繁的改动,并且改动的没有意义。出于可以最小程度的修改代码来得到最大程度便捷的实现,java 8提出了一个概念——行为参数化。

行为参数化

什么是行为参数化呢?可以这么理解:

行为 -> Function,没错就是一个函数。

参数化 -> 可像参数一样进行传递。

合起来就是,java 8中,引入了可以使得函数,像参数一样,进行传递的新特性。

在java 8之前,能够进行传递的只有变量(严格来说是变量的引用)。来到java 8,可以使用Lambda表达式来实现行为参数化。

具体实例分析

在java8还没有出现之前,你接到这样一个需求,帮助果农大爷,从库存中筛选指定标准的苹果,苹果的定义:

@Data

@ToString

public class Apple {

private int weight;

private String color;

private String origin;

public Apple() {

}

public Apple(int weight, String color) {

this.weight = weight;

this.color = color;

}

public Apple(int weight, String color, String origin) {

this.weight = weight;

this.color = color;

this.origin = origin;

}

}

大爷说:“孩砸,帮我筛选不同颜色的苹果,好卖!”。

于是乎,你撸出了下面的代码:

//筛选不同的颜色的苹果

public static List filterApplesByColor(String color,List apples){

List result = new ArrayList();

for(Apple apple : apples){

if(apple.getColor().equals(color)){

result.add(apple);

}

}

return result;

}

大爷又说了:“孩砸,帮我筛选不同重量的苹果,好卖!”

于是乎,你又撸出了下面的代码:

//筛选不同重量的苹果

public static List filterApplesByWeight(int weight,List apples){

List result = new ArrayList();

for(Apple apple : apples){

if(apple.getWeight() > weight){

result.add(apple);

}

}

return result;

}

结果,大爷又说:“孩砸,帮我筛选不同产地的苹果,好卖!”

老子不撸了!什么大爷!明明是刚实习的pm!

但是,pm不是T序列的(jd除外),你没有办法更改人家的思维逻辑,只能从自己的代码入手,当你仔细的观察了代码,发现上面两段代码,只有if块中不一样,渐渐地你陷入了沉思。。。

当存在很多重合的逻辑的时候,就要将重合的逻辑进行提取,抽象。于是乎你进行了抽象,首先,抽象出了一个接口

//这个接口的意义为:定义了筛选苹果的标准,所有筛选的类,都必须来实现这个接口,来达到多态。

@FunctionalInterface //这个注释暂时按下不表,一会解释。

public interface ApplePredicate {

boolean filter(Apple apple);

}

并且重新实现了按照颜色进行筛选的类,重写了其中的filter方法

public class RedAppleFilter implements ApplePredicate {

@Override

public boolean filter(Apple apple) {

if (StringUtils.equals(apple.getColor(),"red")){

return true;

}

return false;

}

}

当我们对红色苹果进行筛选的时候,就可以这样编码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值