供应商功能接口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