供应商功能接口Java示例
时间:2020-01-09 10:35:14 来源:igfitidea点击:
在这篇文章中,我们将看到java.util.function.Supplier功能接口的示例。
供应商功能接口表示不接受任何参数并提供结果的操作。在Supplier接口中,有一个抽象方法get(),没有默认或者静态接口方法。
如果要编写需要返回值的Lambda表达式,则可以将该Lambda表达式编写为Supplier内置功能接口的实现。
供应商功能界面示例
1.如果要生成一些随机数,可以将其实现为Supplier接口的get()方法。
import java.util.function.Supplier;
public class SupplierExample {
public static void main(String[] args) {
Supplier<Double> randomNoGen = () -> Math.random();
System.out.println(randomNoGen.get());
System.out.println(randomNoGen.get());
}
}
输出:
0.9507895772946557 0.11609076109430083
在程序声明中;供应商randomNoGen =()-> Math.random();是Supplier作为lambda表达式的实现。由于此实现是功能接口的实例,因此已分配给类型Supplier的变量。
调用randomNoGen.get()方法时,由于"目标类型",Java可以从上下文中推断出在哪里可以找到get()方法的实现。
2.如果要在应用程序中的多个位置显示当前日期,则可以将其实现为供应商。
import java.time.LocalDate;
import java.util.function.Supplier;
public class SupplierExample {
public static void main(String[] args) {
Supplier<LocalDate> currDate = () -> LocalDate.now();
System.out.println(currDate.get());
}
}
3.作为类对象的提供者。如果存在Employee类,则可以使用Supplier接口创建此类的对象。
public class Employee {
private String name;
private String dept;
private int salary;
Employee(){};
Employee(String name, String dept, int salary){
this.name = name;
this.dept = dept;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return getName() + " " + getDept() + " " + getSalary();
}
}
public class SupplierExample {
public static void main(String[] args) {
// Invokes no-arg constructor
Employee emp = getEmpObject(Employee::new);
System.out.println(emp);
// Invokes constructor with parameters
emp = getEmpObject(() -> new Employee("David", "IT", 12000));
System.out.println(emp);
}
public static Employee getEmpObject(Supplier<Employee> sup) {
return sup.get();
}
}
JDK中的供应商功能接口
内置功能接口在JDK本身中得到广泛使用。在Java Stream API中,有一个方法generate(),将Supplier作为参数。
generate(Supplier <T> s)–返回无限顺序无序流,其中每个元素由提供的供应商生成。
我们可以使用这种方法来生成随机数流。
public class SupplierExample {
public static void main(String[] args) {
Stream.generate(()->Math.random()).limit(3).forEach(System.out::println);
}
}
输出:
0.17411307331904347 0.9293020926865666 0.9854950033297908

