OJCPの勉強で、一向に覚えられないからアウトプット
主な関数型インタフェース
インタフェース | 戻り値型 | メソッド |
---|---|---|
Supplier |
T | get() |
Consumer |
void | accept(T) |
BiConsumer<T,U> | void | accept(T, U) |
Predicate |
boolean | test(T) |
BiPredicate<T,U> | boolean | test(T, U) |
Function<T,R> | R | apply(T) |
BiFunction<T,U,R> | R | apply(T, U) |
UnaryOperator |
T | apply(T) |
BinaryOperator |
T | apply(T, T) |
Runnable | void | run() |
Callable |
V | call() |
- Supplier
- Supplier = 供給
- 値を提供してくれるのでgetterが定義されてる
- Consumer
- Consumer = 消費者
- accept = 受け渡す
- BiConsumer<T,U>は、引数2つ版
- Predicate
- 断定
- 決定を下すのでbooleanが変える
- BiPredicate<T,U>は、引数2つ版
- Function<T,R>
- 関数
- apply = 作動させる
- BiFunction<T,U,R>
- UnaryOperator
- Functionの派生。単項演算
- BinaryOperator
- Runnable
- スレッドのやつ
- Callable
- 呼び出し
サンプル実装
Supplier
public static void main(String[] args) { Supplier<String> supplier = () -> "Supplier"; System.out.println(supplier.get()); }
Consumer
Consumer
public static void main(String[] args) { Consumer<String> consumer = (str) -> System.out.println(str); consumer.accept("Consumer"); }
BiConsumer<T,U>
public static void main(String[] args) { BiConsumer<String, Integer> consumer = (str, i) -> System.out.println(str + Integer.toString(i)); consumer.accept("Consumer:", 123); }
Consumer:123
Predicate
public static void main(String[] args) { Predicate<Object> predicate = (val) -> val == null; System.out.println(predicate.test(null)); }
true
BiPredicate<T,U>
public static void main(String[] args) { BiPredicate<Integer, String> predicate = (val1, val2) -> val1 == null && val2 == null; System.out.println(predicate.test(null, null)); }
true
Function<T,R>
public static void main(String[] args) { Function<Integer, String> function = (val) -> Integer.toString(val + 1); System.out.println(function.apply(150)); }
151
BiFunction<T,U,R>
public static void main(String[] args) { BiFunction<Integer, Long, String> function = (val1, val2) -> Long.toString(Long.valueOf(val1) + val2); System.out.println(function.apply(80, 71L)); }
151
UnaryOperator
public static void main(String[] args) { UnaryOperator<String> op = (str) -> str + "UnaryOperator"; System.out.println(op.apply("test")); }
testUnaryOperator
BinaryOperator
public static void main(String[] args) { BinaryOperator<Integer> op = (val1, val2) -> val1 == val2 ? 0 : 1; System.out.println(op.apply(1, 2)); }
1
Runnable
public static void main(String[] args) { Runnable r = () -> System.out.println("Runnable"); r.run(); }
Runnable
Callable
public static void main(String[] args) throws Exception { Callable<String> cl = () -> "Callable"; System.out.println(cl.call()); }
Callable
Supplierと同じかと思ったが、パッケージが違うな。
concurrentだから、並列処理前提なのだろうか?