π«λλ€μ & Stream API
1. λλ€μ (Lambda Expression)
λλ€μμ μλ° 8μμ λμ λ κΈ°λ₯μΌλ‘, μ½λλ₯Ό λ κ°κ²°νκ³ μ½κΈ° μ½κ² λ§λ€μ΄μ€λ€. κΈ°μ‘΄μλ μ΅λͺ ν΄λμ€λ₯Ό μ¬μ©νμ¬ λ©μλλ₯Ό ꡬννμ§λ§, λλ€μμ μ¬μ©νλ©΄ μ΄λ₯Ό ν¨μ¬ κ°λ¨νκ² ννν μ μλ€.
1.1 λλ€μμ λ¬Έλ²
λλ€μμ λ§€κ°λ³μ λͺ©λ‘κ³Ό νμ΄ν(->), κ·Έλ¦¬κ³ μ€νν μ½λλ₯Ό ν μ€λ‘ νννλ€. μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ ννλ‘ μμ±νκ² λλ€:
(parameters) -> expression
νΉμ μ€νν μ½λκ° μ¬λ¬ μ€μ΄λΌλ©΄ μ€κ΄νΈλ‘ λ¬Άμ΄μ€λ€:
(parameters) -> {
// μ¬λ¬ μ€μ μ½λ
}
λλ€μμ μ£Όλ‘ ν¨μν μΈν°νμ΄μ€μ ν¨κ» μ¬μ©λλ€. ν¨μν μΈν°νμ΄μ€λ νλμ μΆμ λ©μλλ§ κ°μ§λ μΈν°νμ΄μ€λ‘, @FunctionalInterface μ΄λ Έν μ΄μ μΌλ‘ λͺ μν μ μλ€. λνμ μΈ ν¨μν μΈν°νμ΄μ€λ‘λ Runnable, Callable, Comparator, κ·Έλ¦¬κ³ Function λ±μ΄ μλ€.
1.2 λλ€μμ μμ
λλ€μμ μ¬μ©νμ¬ λ¦¬μ€νΈμ μμλ₯Ό μΆλ ₯νλ μμ λ₯Ό 보μ. κΈ°μ‘΄μλ μ΄λ κ² μμ±νλ μ½λλ₯Ό:
List<String> list = Arrays.asList("apple", "banana", "cherry");
for (String s : list) {
System.out.println(s);
}
λλ€μμ μ¬μ©νμ¬ λ€μκ³Ό κ°μ΄ κ°λ¨νκ² μμ±ν μ μλ€:
list.forEach(s -> System.out.println(s));
μ΄μ²λΌ λλ€μμ μ¬μ©νλ©΄ μ½λκ° ν¨μ¬ κ°κ²°ν΄μ§κ³ , κ°λ μ±λ λμμ§λ€.
2. μ€νΈλ¦Ό API (Stream API)
μ€νΈλ¦Ό APIλ μλ° μ»¬λ μ μ λν΄ λ³΅μ‘ν λ°μ΄ν° μ²λ¦¬ μμ μ μ½κ² μνν μ μλλ‘ λμμ£Όλ κΈ°λ₯μ΄λ€. μ€νΈλ¦Όμ μ¬μ©νλ©΄ λ°μ΄ν° μμ€λ₯Ό μΆμννκ³ , νν°λ§, λ§€ν, μ λ ¬ λ±μ μμ μ μ μΈμ μΌλ‘ μμ±ν μ μλ€.
2.1 μ€νΈλ¦Ό APIμ μ£Όμ νΉμ§
- μ μΈμ λ°©μ: μ€νΈλ¦Ό APIλ₯Ό μ¬μ©νλ©΄ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ λ°©μμ μ½λλ‘ μ€λͺ νλ κ²μ΄ μλλΌ, 무μμ ν κ²μΈμ§μ μ΄μ μ λ§μΆ μ μλ€.
- 체μ΄λ: μ¬λ¬ μ€νΈλ¦Ό μ°μ°μ μ°κ²°νμ¬ ν μ€μ μ½λλ‘ λ³΅μ‘ν μμ μ μνν μ μλ€.
- λ΄λΆ λ°λ³΅: κΈ°μ‘΄μ for-each λ¬Έκ³Ό λ¬λ¦¬ μ€νΈλ¦Όμ λ΄λΆμ μΌλ‘ λ°λ³΅μ μ²λ¦¬νλ―λ‘, λ©ν°μ½μ΄ νλ‘μΈμλ₯Ό νμ©ν λ³λ ¬ μ²λ¦¬λ κ°λ₯νλ€.
2.2 μ€νΈλ¦Ό APIμ μ¬μ© μμ
리μ€νΈμμ νΉμ 쑰건μ λ§μ‘±νλ μμλ§ νν°λ§ν ν, κ° μμλ₯Ό λ³ννκ³ , κ·Έ κ²°κ³Όλ₯Ό μμ§νλ μμ μ μ€νΈλ¦Όμ ν΅ν΄ κ°λ¨νκ² μνν μ μλ€:
List<String> list = Arrays.asList("apple", "banana", "cherry");
List<String> filteredList = list.stream()
.filter(s -> s.startsWith("a")) // 'a'λ‘ μμνλ μμλ§ νν°λ§
.map(String::toUpperCase) // λλ¬Έμλ‘ λ³ν
.collect(Collectors.toList()); // κ²°κ³Όλ₯Ό 리μ€νΈλ‘ μμ§
System.out.println(filteredList); // [APPLE]
μ΄ μ½λλ 리μ€νΈμ κ° μμλ₯Ό μ€νΈλ¦ΌμΌλ‘ μ²λ¦¬νλ©΄μ, νΉμ 쑰건μ λ§μ‘±νλ μμλ§ νν°λ§νκ³ , λλ¬Έμλ‘ λ³νν ν κ²°κ³Όλ₯Ό 리μ€νΈλ‘ μμ§νλ€.
2.3 μ€νΈλ¦Ό APIμ μ£Όμ μ°μ°
- filter(Predicate): μ£Όμ΄μ§ 쑰건μ λ§λ μμλ§ νν°λ§νλ€.
- map(Function): κ° μμλ₯Ό μ£Όμ΄μ§ ν¨μμ λ°λΌ λ³ννλ€.
- sorted(): μμλ₯Ό μ λ ¬νλ€.
- collect(Collector): μ€νΈλ¦Όμ κ²°κ³Όλ₯Ό νΉμ μλ£κ΅¬μ‘°λ‘ μμ§νλ€.
- forEach(Consumer): κ° μμμ λν΄ μ£Όμ΄μ§ μμ μ μννλ€.
μ΄μ κ°μ΄ λλ€μκ³Ό μ€νΈλ¦Ό APIλ μλ°μμ μ½λμ κ°κ²°μ±, κ°λ μ±, κ·Έλ¦¬κ³ ν¨μ¨μ±μ λμ΄λ λ° λ§€μ° μ μ©ν λꡬλ€μ΄λ€. μ΄λ₯Ό ν΅ν΄ 볡μ‘ν μμ λ κ°λ¨νκ² ννν μ μμΌλ©°, νΉν 컬λ μ λ°μ΄ν°λ₯Ό λ€λ£° λ κ·Έ μ§κ°λ₯Ό λ°ννλ€. μλ°λ₯Ό λ μ νμ©νκΈ° μν΄ κΌ μ΅νλλ©΄ μ’λ€!