supplier也是是用来创建对象的,但是不同于传统的创建对象语法:new,看下面代码:

    1. package com.hikktn.jdk8.function;
    2. import java.util.function.Supplier;
    3. /**
    4. * 用于进行值操作
    5. * @author 12134
    6. *
    7. */
    8. public class MySupplierDemo {
    9. public static Integer getMin(Supplier<Integer> supplier) {
    10. return supplier.get();
    11. }
    12. public static void main(String[] args) {
    13. // 创建数组
    14. int[] arr = { 100, 20, 50, 30, 99, 101, -50 };
    15. // 求最小值
    16. Integer result = getMin(() -> {
    17. int min = arr[0];
    18. for (int i : arr) {
    19. if (i < min) {
    20. min = i;
    21. }
    22. }
    23. return min;
    24. });
    25. System.out.println(result);
    26. }
    27. }

    结果

    1. -50
    1. public class TestSupplier {
    2. private int age;
    3. TestSupplier(){
    4. System.out.println(age);
    5. }
    6. public static void main(String[] args) {
    7. //创建Supplier容器,声明为TestSupplier类型,此时并不会调用对象的构造方法,即不会创建对象
    8. Supplier<TestSupplier> sup= TestSupplier::new;
    9. System.out.println("--------");
    10. //调用get()方法,此时会调用对象的构造方法,即获得到真正对象
    11. sup.get();
    12. //每次get都会调用构造方法,即获取的对象不同
    13. sup.get();
    14. }
    15. }

    结果:

    1. --------
    2. 0
    3. 0

    1.supplier是个接口,有一个get()方法
    2.语法 :

    1. Supplier<TestSupplier> sup= TestSupplier::new;

    3.每次调用get()方法时都会调用构造方法创建一个新对象。