1. 程式人生 > 實用技巧 >Java8 常用核心函式式介面

Java8 常用核心函式式介面

Java8中提供了許多新特性,其中之一就是函式是程式設計,官方提供了一些常用的函式式介面,基本已經滿足日常使用,簡單介紹一下常用的一些函式式介面。

消費型介面Consumer<T>

/**
 * 消費型介面 void accept(T t);
 * @param count
 * @param consumer
 */
public static void consumer(int count, Consumer<Integer> consumer) {
    consumer.accept(count);
}

呼叫:

consumer(100, (count) -> System.out.println("Consumer Type Interface: " + count));

輸出結果:

Consumer Type Interface: 100

供給型介面Supplier<T>

/**
 * 供給型介面 T get();
 * 獲取一組隨機數
 * @return
 */
public static List<Integer> getRandoms(int count, Supplier<Integer> supplier) {
    List<Integer> list = new ArrayList<>();
    for (int i = 0; i < count; i++) {
        Integer integer = supplier.get();
        list.add(integer);
    }
    return list;
}

呼叫:

List<Integer> randoms = getRandoms(5, () -> (int) (Math.random() * 100));
System.out.println("Supplier Type Interface: "+randoms);

輸出結果:

Supplier Type Interface: [80, 69, 94, 44, 2]

斷言型介面Predicate<T>

/**
 * 斷言型介面  boolean test(T t);
 * 字串集合過濾
 * @param stringList
 * @param predicate
 * @return
 */
public static List<String> filterString(List<String> stringList, Predicate<String> predicate) {
    List<String> list = new ArrayList<>();
    stringList.forEach(str -> {
        if (predicate.test(str)) {
            list.add(str);
        }
    });
    return list;
}

呼叫:

List<String> list = filterString(Arrays.asList("Hello","World","!"), (s) -> s.length() >= 5);
System.out.println("Predicate Type Interface: "+list);

輸出結果:

Predicate Type Interface: [Hello, World]

函式型介面Function<T, R>

/**
 * 函式型介面 R apply(T t);
 * @param string
 * @param function
 * @return
 */
public static String handleString(String string, Function<String, String> function){
     return function.apply(string);
}

呼叫:

String s = handleString("Hello zs!", (string) -> string.replace("zs", "world"));
System.out.println("Function Type Interface: "+s);

輸出結果:

Function Type Interface: Hello world!

上面簡單的例子也說明了,使用這些內建函式式介面方便我們寫一些通用型工具,比如字串操作的通用方法等等,大大提高程式碼的通用性,提高我們的開發效率,這裡只是列舉了一些簡單的使用案例,上述介面中還有其他的方法,需要我們在實際使用中慢慢發掘。

常用介面

下面列舉Java8中內建的函式式介面:

介面名稱 描述
BiConsumer<T,U> 表示了一個接收兩個輸入引數的操作,並且不返回任何結果
BiFunction<T,U,R> 表示了一個接收兩個輸入引數的方法,並且返回一個結果
BinaryOperator 表示了一個作用於於兩個同類型操作符的操作,並且返回了操作符同類型的結果
BiPredicate<T,U> 表示了一個兩個引數的boolean值方法
BooleanSupplier 表示了boolean值結果的提供方
DoubleBinaryOperator 表示了作用於兩個double值操作符的操作,並且返回了一個double值的結果。
DoubleConsumer 表示一個接收double值引數的操作,並且不返回結果。
DoubleFunction 表示接收一個double值引數的方法,並且返回結果
DoublePredicate 表示一個擁有double值引數的boolean值方法
DoubleSupplier 表示一個double值結構的提供方
DoubleToIntFunction 接收一個double型別輸入,返回一個int型別結果。
DoubleToLongFunction 接收一個double型別輸入,返回一個long型別結果
DoubleUnaryOperator 接收一個引數同為型別double,返回值型別也為double 。
IntBinaryOperator 接收兩個引數同為型別int,返回值型別也為int 。
IntConsumer 接收一個int型別的輸入引數,無返回值 。
IntFunction 接收一個int型別輸入引數,返回一個結果 。
IntPredicate 接收一個int輸入引數,返回一個布林值的結果。
IntSupplier 無引數,返回一個int型別結果。
IntToDoubleFunction 接收一個int型別輸入,返回一個double型別結果 。
IntToLongFunction 接收一個int型別輸入,返回一個long型別結果。
IntUnaryOperator 接收一個引數同為型別int,返回值型別也為int 。
LongBinaryOperator 接收兩個引數同為型別long,返回值型別也為long。
LongConsumer 接收一個long型別的輸入引數,無返回值。
LongFunction 接收一個long型別輸入引數,返回一個結果。
LongPredicateR 接收一個long輸入引數,返回一個布林值型別結果。
LongSupplier 無引數,返回一個結果long型別的值。
LongToDoubleFunction 接收一個long型別輸入,返回一個double型別結果。
LongToIntFunction 接收一個long型別輸入,返回一個int型別結果。
LongUnaryOperator 接收一個引數同為型別long,返回值型別也為long。
ObjDoubleConsumer 接收一個object型別和一個double型別的輸入引數,無返回值。
ObjIntConsumer 接收一個object型別和一個int型別的輸入引數,無返回值。
ObjLongConsumer 接收一個object型別和一個long型別的輸入引數,無返回值。
ToDoubleBiFunction<T,U> 接收兩個輸入引數,返回一個double型別結果
ToDoubleFunction 接收一個輸入引數,返回一個double型別結果
ToIntBiFunction<T,U> 接收兩個輸入引數,返回一個int型別結果。
ToIntFunction 接收一個輸入引數,返回一個int型別結果。
ToLongBiFunction<T,U> 接收兩個輸入引數,返回一個long型別結果。
ToLongFunction 接收一個輸入引數,返回一個long型別結果。
UnaryOperator 接收一個引數為型別T,返回值型別也為T。

這些介面位於java.util包中,這也能看出這些內建介面的作用定位,幫助我們高效的開發。