Lambda Expression
Javaμ λλ€ (νν)μ
λλ€ ννμμ΄λ? ν¨μ(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
λ§ κ°μ§λ ν¨μν μΈν°νμ΄μ€μ΄λ€.
java.util.function
μμ£Ό μ¬μ©λλ ν¨μν μΈν°νμ΄μ€λ€μ μ 곡νλ ν¨ν€μ§
μ΄λ€μ λͺ¨λ λλ€μμ΄ ν λΉλ μ μμ
μμ£Ό μ¬μ©νλ μΈν°νμ΄μ€λ€
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);
λ§€κ°λ³μκ° 2κ°
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
Last updated