1. 程式人生 > 程式設計 >Java函式式介面Supplier介面例項詳解

Java函式式介面Supplier介面例項詳解

這篇文章主要介紹了Java函式式介面Supplier介面例項詳解,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

JDK提供了大量常用的函式式介面以豐富Lambda的典型使用場景,它們主要在 java.util.function 包中被提供。 下面是最簡單的Supplier介面及使用示例。

Supplier介面概述

// Supplier介面原始碼


@FunctionalInterface
public interface Supplier<T> {

  /**
   * Gets a result.
   *
   * @return a result
   */
  T get();
}

java.util.function.Supplier<T> 介面僅包含一個無參的方法: T get() 。用來獲取一個泛型引數指定型別的物件資料。由於這是一個函式式介面,這也就意味著對應的Lambda表示式需要“對外提供”一個符合泛型型別的物件資料。如:

import java.util.function.Supplier;

public class Demo01Supplier {
  public static void main(String[] args) {
    String msgA = "Hello ";
    String msgB = "World ";
    System.out.println(
        getString(
            () -> msgA + msgB
        )
    );
  }

  private static String getString(Supplier<String> stringSupplier) {
    return stringSupplier.get();
  }
}

控制檯輸出:

Hello World

練習:求陣列元素最大值

使用 Supplier 介面作為方法引數型別,通過Lambda表示式求出int陣列中的最大值。介面的泛型使用 java.lang.Integer 類。

import java.util.function.Supplier;

public class DemoNumberMax {
  public static void main(String[] args) {
    int[] numbers = {100,200,300,400,500,-600,-700,-800,-900,-1000};
    int numberMax = arrayMax(
        () -> {
          int max = numbers[0];
          for (int number : numbers) {
            if (max < number) {
              max = number;
            }
          }
          return max;
        }
    );
    System.out.println("陣列中的最大值為:" + numberMax);
  }

  /**
   * 獲取一個泛型引數指定型別的物件資料
   * @param integerSupplier 方法的引數為Supplier,泛型使用Integer
   * @return 指定型別的物件資料
   */
  public static Integer arrayMax(Supplier<Integer> integerSupplier) {
    return integerSupplier.get();
  }
}

控制檯輸出:

陣列中的最大值為:500

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。