java创建person接口_Java 常用函数式接口 —— Supplier接口

JDK提供了大量的函数式接口,方便我们开发的时候无需自己编写接口,这些接口都比较通用,学会他们并且在工作中使用,不仅方便的解决问题,而且十分优雅。

1、接口概述

Supplier接口的源码比较简单,只有一个方法。

@FunctionalInterface

public interface Supplier{

/**

* Gets a result.

*

* @return a result

*/

T get();

}

get方法没有参数,但是有一个返回值,该返回值是泛型参数指定的类型。该方法用于创建指定类型的对象。

2、使用方式

在尝试使用Supplier接口之前,我们先看这样的一个场景:尝试从某个地方获取一个对象,如果没有获取到,那么我们就自己造一个默认的对象。

我们先定义一个对象Person.

public class Person {

private final String name;

private final Integer age;

public Person(String name, Integer age){

this.name = name;

this.age = age;

}

}

现在来测试:getPerson 方法通过 name 来从列表中查找Person对象,如果查到就返回,没有查到返回 null. 在main方法中我们调用该方法,并且判断返回结果为空的时候就创建一个默认的Person 对象,然后继续后面的逻辑。

public class SupplierTest {

private static ListpersonList = new ArrayList() {

{

add(new Person("lisi", 20));

add(new Person("zhangsan", 23));

}

};

public static void main(String[] args) {

String name = "wangwu";

Person person = getPerson(name);

if (person == null) {

person = new Person(name, 10);

}

//后续处理

System.out.println(person);

}

public static Person getPerson(String name) {

for (Person person : personList) {

if (person.getName().equals(name)) {

return person;

}

}

return null;

}

}

上面的这种写法虽然能解决问题,但现在可以使用Supplier简化代码。

public class SupplierTest {

private static ListpersonList = new ArrayList() {

{

add(new Person("lisi", 20));

add(new Person("zhangsan", 23));

}

};

public static void main(String[] args) {

String name = "wangwu";

Person person = getPerson(name, () -> new Person(name, 10));

//后续处理

System.out.println(person);

}

public static Person getPerson(String name, Suppliersupplier) {

return personList.stream()

.filter(e -> e.getName().equals(name))

.findAny()

.orElse(supplier.get());

}

}

这里我们在 getPerson 方法中添加了一个参数Suppliersupplier,在没有获取到需要寻找的对象的时候,由调用方提供的Supplier来生成一个默认的对象。那么我们在main方法中调用 getPerson 的时候就无需进行空判断,代码也就比较清楚简单。

Person person = getPerson(name, () -> new Person(name, 10));

这种模式看起来非常直观,对于这种场景应该鼓励使用。getPerson的第一个参数是name,如果使用该name值查找到Person对象,那么就使用它,如果查找为空,那么我们自己创建一个默认的Person实例,也就是上面的Lambda表达式的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值