java8函数式接口_java8中的函数式接口

上一章我介绍了lambda表达式的基本语法,今天我来介绍一下java中的函数式接口。

一、定义:

所谓函数式接口其实就是只定义了一个抽象方法的接口就是函数式接口。例如java.lang.Runable接口就是一个函数式接口。我们可以在接口上添加@FunctionalInterface注解来表示这接口是一个函数式接口但是这个注解并不是必须的,类似于@Override注解。在java8中提供了一些常用的函数式接口,下面我来介绍一些常用的函数式接口。

二、常用的函数式接口

1.Predicate

表示一个参数的谓词,用来测试输入是否满足条件。代码实例:

定义一个ListFilterUtil的工具类:

public classListFilterUtils {public static List FilterList(List list,Predicatepredicate){

List returnList = new ArrayList();if(list!=null&&list.size()>0){for(T t : list) {if(predicate.test(t)){

returnList.add(t);

}

}

}returnreturnList;

}

}

定义一个对象Car:

public classCar {publicCar(String price, String colour) {super();this.price =price;this.colour =colour;

}privateString price;privateString colour;publicString getPrice() {returnprice;

}public voidsetPrice(String price) {this.price =price;

}publicString getColour() {returncolour;

}public voidsetColour(String colour) {this.colour =colour;

}

@OverridepublicString toString() {return "Car [price=" + price + ", colour=" + colour + "]";

}

}

调用工具方法:

public static voidmain(String[] args) {

List list = new ArrayList();

list.add(new Car("5000","black"));

list.add(new Car("2000","green"));

list.add(new Car("2000","blue"));

list.add(new Car("2000","red"));

list.add(new Car("5000","red"));

list.add(new Car("5000","green"));

list.add(new Car("7000","black"));//获取价格为5000的汽车

List list1 = ListFilterUtils.FilterList(list,(car)->car.getPrice().equals("5000"));for(Car car1 : list1) {

System.out.println(car1.toString());

}

}

控制台输出:

Car [price=5000, colour=black]

Car [price=5000, colour=red]

Car [price=5000, colour=green]

这里只是展示如何使用Predicate接口,在实际的开发中我们并不会这样使用,而是使用java8中提供的Stream API。

2.Function

表示进行函数类型的转换,T是函数的输入类型,R是函数的输出类型。代码实例:

定义一个转换list集合的方法:

public static List convser(List list,Functionmapper){

List returnList = new ArrayList();if(list!=null&&list.size()>0){for(T t : list) {

returnList.add(mapper.apply(t));

}

}returnreturnList;

}

调用工具方法:

//把颜色都设置为大写

list = ListUtils.convser(list,(car)->newCar(car.getPrice(),car.getColour().toUpperCase()));for(Car car1 : list) {

System.out.println(car1);

}

控制台输出:

Car [price=5000, colour=BLACK]

Car [price=2000, colour=GREEN]

Car [price=2000, colour=BLUE]

Car [price=2000, colour=RED]

Car [price=5000, colour=RED]

Car [price=5000, colour=GREEN]

Car [price=7000, colour=BLACK]

3.Consumer

表示接受输入参数并且不返回结果的操作与Function不同的是Consumer是在原来对象的基础上修改而Function接口是新建对象。代码实例:

修改转换的接口:

public static List convser(List list,Consumermapper){if(list!=null&&list.size()>0){for(T t : list) {

mapper.accept(t);

}

}returnlist;

}

调用转换的方法:

//把颜色都设置为大写

ListUtils.convser(list,(car)->{car.setColour(car.getColour().toUpperCase());});for(Car car1 : list) {

System.out.println(car1);

}

输出的结果和Function接口是一样的。

上面我们介绍了三个常用的函数式接口,在平时的开发中对于集合的操作我们更常使用的是java8提供的Stream Api,关于java8提供的Stream API我会在以后的博客中介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值