Java8 常用核心函式式介面
阿新 • • 發佈:2020-09-06
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
包中,這也能看出這些內建介面的作用定位,幫助我們高效的開發。