-
λλ€ ννμμ΄λ? ν¨μ(method)λ₯Ό μ(expression)μΌλ‘ ννν κ²
-
Javaλ jdk1.8(java 8)λΆν° ν¨μν κΈ°λ₯ μΌλΆ μ§μ
-
λ€μκ³Ό κ°μ΄ μ¬μ©
// μΌλ° int add(int a, int b) { return a+b; } // ν¨μν (a, b) -> { return a+b; } // μΆμ½ νν (a, b) -> a + b
- λ©μλ μ΄λ¦, λ°ννμ μ λ³΄κ° μ κ±°λ¨
- λ°νκ°λ§ μλ κ²½μ° μ€κ΄νΈ, return λ¬Έ μ κ±°νκ³ μΆμ½ νν μ¬μ© κ°λ₯
- 맀κ°λ³μκ° νλλ©΄ μκ΄νΈλ μλ΅ κ°λ₯ (λμ νμ μ 보 μμ΄μΌ ν¨)
-
Javaμ λλ€μμ
μ΅λͺ ν¨μ
κ° μλλΌμ΅λͺ κ°μ²΄
μ? Javaμμ ν¨μλ λ°λμ ν΄λμ€ λ΄λΆμ λ©μλλ‘ μ‘΄μ¬ν΄μΌ νλ―λ‘
// λλ€μ (a, b) -> a > b ? a : b // μ»΄νμΌ μ μ·¨κΈ (μ΅λͺ κ°μ²΄) new Object() { int max(int a, int b) { return a > b ? a : b; } }
-
λλ€μμ μ΄μ©νκΈ° μν΄μλ
ν¨μν μΈν°νμ΄μ€
κ° νμν¨
-
λλ€μμ λ€λ£¨κΈ° μν΄ μ μΈνλ μΈν°νμ΄μ€
-
(λλ€μμΌλ‘ μ μΈλ ) λ¨ νλμ λ©μλλ§ κ°λλ€.
-
@FunctionalInterface
μ΄λ Έν μ΄μ μ μ΄μ©νλ€. (λ©ν μ΄λ Έν μ΄μ λΆλΆ μ°Έμ‘°) -
μμ1) max λλ€μμ μν ν¨μν μΈν°νμ΄μ€
public class LambdaExample { public static void main(String[] args) { MaxFunc maxFunc = (a, b) -> a > b ? a : b; System.out.println(maxFunc.max(3, 5)); // 5 } } interface MaxFunc { // λλ€μμ λΆμ¬νλ μ΄λ¦μΈ κ² int max(int a, int b); }
-
μμ2) μ λ ¬ 쑰건μ μ§μ νλ Comparatorμ λμ λ°©μ
// in Collections.java public static <T> void sort(List<T> list, Comparator<? super T> c) { list.sort(c); }
// 3, 1, 7 λ€μ΄μλ 리μ€νΈ μ μΈ ν μ λ ¬ List<Integer> list = new LinkedList<>(); list.add(3); list.add(1); list.add(7); // κΈ°μ‘΄μ λ°©μ (μ΅λͺ ν΄λμ€ μ μΈ) Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer a, Integer b) { return a.compareTo(b); // μ€λ¦μ°¨μ } }); // λλ€μμ μ΄μ© Collections.sort(list, (a, b) -> a.compareTo(b));
- Comparator λν λ¨ νλμ λ©μλ
compare
λ§ κ°μ§λ ν¨μν μΈν°νμ΄μ€μ΄λ€.
- Comparator λν λ¨ νλμ λ©μλ
- μμ£Ό μ¬μ©λλ ν¨μν μΈν°νμ΄μ€λ€μ μ 곡νλ ν¨ν€μ§
- μ΄λ€μ λͺ¨λ λλ€μμ΄ ν λΉλ μ μμ
- Runnable
- μ€λ λλ₯Ό λ§λ€κΈ° μν μΈν°νμ΄μ€
void run()
ν¨μλ§ μ§μ
- Supplier
- 곡κΈμ μν μ νλ μΈν°νμ΄μ€
T get()
λ©μλ μ§μ- 맀κ°λ³μ(μ λ ₯κ°)λ μκ³ , λ°νκ°μ μ‘΄μ¬
- Consumer
- μλΉμ μν μ νλ μΈν°νμ΄μ€
void accept(T t)
λ©μλ μ§μ- 맀κ°λ³μλ μκ³ , λ°νκ°μ μμ
- Function<T, R>
- ν¨μ μ체μ μν μ νλ μΈν°νμ΄μ€
R apply(T t)
λ©μλ μ§μ- 맀κ°λ³μ(t), λ°νκ°(r) λͺ¨λ νλμ© μ‘΄μ¬
- Predicate
- 쑰건μμ νννλλ° μ¬μ©
- λλ€μμ κ²°κ³Ό(λ°νκ°)κ° booleanμ΄μ΄μΌ ν¨
boolean test(T t)
λ©μλ μ§μ- μ¬μ€ Predicateλ test μ΄μΈμλ λ€μκ³Ό κ°μ default λ©μλλ₯Ό μ 곡ν¨
Predicate<T> negate()
- boolean κ²°κ³Όμ NOT μ°μ°μ ν Predicate λ°ν
Predicate<T> and(Predicate p)
- λ€λ₯Έ κ²κ³Ό and μ°μ°ν Predicate λ°ν
Predicate<T> or(Predicate p)
- λ€λ₯Έ κ²κ³Ό or μ°μ°ν Predicate λ°ν
static Predicate<T> isEqual(Object o)
- μ£Όμ΄μ§ κ°μ²΄μ κ°μμ§λ₯Ό νλ³νλ Predicate λ°ν
- static ν¨μμμ μ£Όμ
boolean result = Predicate.isEqual(str1).test(str2);
- BiConsumer<T, U>
void accept(T t, U u)
- BiPredicate<T, U>
boolean test(T t, U u)
- BiFunction<T, U, R>
R apply(T t, U u)
- UnaryOperator
T apply(T t)
- BinaryOperator
T apply(T t, T t)
- νλμ λ©μλλ§ νΈμΆνλ λλ€μμ
λ©μλ μ°Έμ‘°
λ‘ μΆμ½ νν κ°λ₯ - static λ©μλ λλ ν΄λΉ μΈμ€ν΄μ€μ λ©μλλ₯Ό μ°Έμ‘°(νΈμΆ)
- ClassName::method
- μμ±μ μ°Έμ‘°
- ClassName::new