λλ€μ
μ΅λͺ ν¨μ(anonymous function) ννλ₯Ό κ°μ§ ννμ
λλ€μ κΈ°λ³Έ λ¬Έλ²
(λ§€κ°λ³μ) -> { μ€νμ½λ }
- λ§€κ°λ³μ : λ©μλμ μ λ¬ν μ λ ₯κ° μ μ
- (->) : λλ€ μ°μ°μ (arrow operator)
- { μ€νμ½λ } : λ©μλμ μ€ν λ΄μ©μ μμ±
int add(int x, int y) { return x + y; } // λ©μλ λ°ν νμ
, λ©μλλͺ
μλ΅ (int x , int y ) -> { return x + y; } // λ§€κ°λ³μ νμ
μλ΅ (x,y) -> { return x + y ; } // 리ν΄λ¬Έλ§ μλ κ²½μ° μ€κ΄νΈ, return μλ΅ (x, y) -> x + y; // νμ
μ μλ΅ν΄λ μ»΄νμΌλ¬κ° νμ
μμΉλ₯Ό μΆλ‘ νμ¬ λμνκΈ°λλ¬Έμ μ€λ₯λμ§μμ
λλ€μ μ₯μ
- μ½λ κ°κ²°μ±: λΆνμν μ΅λͺ ν΄λμ€ μμ± μμ΄ μ½λλ₯Ό μ€μΌ μ μμ΅λλ€.
- κ°λ μ± ν₯μ: ννμ΄ μ§κ΄μ μ΄λΌ μ΄ν΄νκΈ° μ½μ΅λλ€.
- ν¨μν νλ‘κ·Έλλ° μ§μ: μ€νΈλ¦Ό APIμ ν¨κ» νμ©νλ©΄ κ°λ ₯ν λ°μ΄ν° μ²λ¦¬ κΈ°λ₯μ μ 곡ν©λλ€.
λλ€μ λ¨μ
- λλ²κΉ μ΄λ €μ: λλ€μμ μ΅λͺ μ± λλ¬Έμ λλ²κΉ μ΄ λ³΅μ‘ν μ μμ΅λλ€.
- μ§λμΉκ² μ¬μ© μ 볡μ‘μ± μ¦κ°: κ°κ²°μ±μ μν΄ κ³Όλνκ² μ¬μ©νλ©΄ κ°λ μ±μ΄ λ¨μ΄μ§ μ μμ΅λλ€.
λλ€μμ λ κ°κ²°νκ² ( λ©μλ μ°Έμ‘° ::
μ°μ°)
λ©μλ μ°Έμ‘° ::
μ°μ°
list.flatMap(innerList -> innerList.stream()); list.flatMap(List::stream);
μ΄ λλ€μμ λ©μλ μ°Έμ‘° μ°μ°μ ν΅ν΄μ λ κ°λ΅νκ² μμ±ν μ μλ€.
ν΄λμ€λͺ
::λ©μλλͺ
Stream.of("1", "2", "3") .map(Integer::parseInt) .forEach(System.out::println); // .map(s -> Integer.parseInt(s)) μ κ°μ String str = "Hello"; Supplier<Integer> lengthSupplier = str::length; System.out.println(lengthSupplier.get()); // κ²°κ³Ό: 5 // () -> str.length() μ κ°μ System.out::println // x -> System.out.println(x) //System.out κ°μ²΄μ println κ°μ²΄ λ©μλλ₯Ό μ°Έμ‘°νλ€λ λ» Stream.of(1, 2, 3, 4, 5) .reduce(Math::max) .ifPresent(System.out::println); // μΆλ ₯: 5 //Math.max μ°Έμ‘° Supplier<List<String>> listSupplier = ArrayList::new; List<String> list = listSupplier.get(); // () -> new ArrayList<>() μ κ°μ
μμ 1 : forEach λ©μλ + Stream λλ€μ
List<String> fruits = List.of("Apple", "Banana", "Cherry"); for (int i = 0; i < fruits.size(); i++) { System.out.println(fruits.get(i)); }
List<String> fruits = List.of("Apple", "Banana", "Cherry"); fruits.forEach(fruit -> System.out.println(fruit));
foreach λ°λ³΅λ¬Έκ³Ό ForEach λ©μλ μ°¨μ΄μ
