2. Table of Contents
1. Introduction
• Why Did They Need To Change Java Again ?
• What Is Functional Programming ?
• Example Domain
2. Lambda Expressions
• Your First Lambda Expression
• How to Spot a Lambda in a Haystack
• Using Values
• Functional Interfaces
• Type Inference
• Key Points
3. • マルチコア化で処理性能向上を目指す時代
• java.util.concurrent パッケージなどを使った並行処理には限界がある
⇒ ラムダ式を使った関数型プログラミングで簡潔、かつ強力な並行処理の実装
が書ける
• 関数型言語の利点
• 可読性
• 保守性
• バグが少ない
Why Did They Need To Change Java Again ?
17. Functional Interfaces
• 関数型インターフェイスには、いくつかのコアグループがある
Interface name Arguments Returns Example
Predicate<T> T boolean Has this album been
released yet?
Consumer<T> T void Printing out a value
Function<T, R> T R Get the name from
an Artist Object
Supplier<T> None T A factory method
UnaryOperator<T> T T Logical not(!)
BinaryOperator<T> (T, T) T Multiplying two
numbers(*)
18. Type Inference(型推論)
• Java7から、ダイヤモンド演算子を用いた型推論が可能
• メソッドの引数には型推論が使えなかったが、Java8から使えるよう
になった
Map<String, Integer> oldWordCounts = new HashMap<String, Integer>();
Map<String, Integer> diamondWordCounts = new HashMap<>();
useHashmap(new HashMap<>());
…
private void useHashmap(Map<String, String> values);
19. Type Inference
• ラムダ式を使った型推論
• パラメータの型は省略可能
• javacで戻り値の型がbooleanであるかチェックしてくれる
Predicate<Integer> atLeast5 = x -> x > 5;
public interface Predicate<T> {
boolean test(T t);
}
PredicateT boolean