四大類函式式介面
阿新 • • 發佈:2019-01-05
供給型介面
Supplier<T> 返回T型別物件
T get();
Supplier<Apple> supplier = () -> new Apple();
// Supplier<Apple> supplier = Apple::new;
supplier.get();
消費型介面
Consumer<T> 接收一個 T 型別
void accept(T t);
List<String> languages = Arrays.asList("java","scala","python"); Consumer<String> consumer = System.out::println; languages.stream().forEach(consumer);
函式型介面
Function<T, R> 由T型別物件轉成R型別物件
R apply(T t);
List<String> languages = Arrays.asList("java","scala","python");
Function<String, Integer> ti = String::length;
languages.stream()
.map(ti)
.forEach(System.out::println);
斷言型介面
Predicate<T> 條件判斷 boolean test(T t);
List<String> languages = Arrays.asList("java","scala","python");
Predicate<String> p = (str) -> str.length() > 4;
languages.stream()
.filter(p)
.forEach(System.out::println);
一個簡單的使用多個函式式介面的例子:
List<String> languages = Arrays.asList("java","scala","python"); Function<String, Integer> ti = String::length; BiConsumer<Integer, String> bi = (a, b) -> System.out.println(b + a); IntPredicate ip = x -> x > 4; IntPredicate ip1 = x -> x < 100; IntUnaryOperator io = x -> x * x; languages.stream() .map(ti) .map(io::applyAsInt) .filter(x->ip.and(ip1).test(x)) .forEach(x -> bi.accept(x, "prefix_"));
部分函式式介面中有 default 方法, 可以進行組合使用!