(매개변수) -> { 실행문 } 예시:
(x, y) -> x + y // 두 수의 합
s -> s.length() // 문자열 길이 반환
() -> System.out.println("Hello") // 매개변수 없는 경우
Function<T, R>
.apply(T) 실행 Function<String, Integer> length = s -> s.length();
System.out.println(length.apply("Hello")); // 5
Supplier<T>
.get() 실행 Supplier<Double> random = () -> Math.random();
System.out.println(random.get());
Consumer<T>
.accept(T) 실행 Consumer<String> printer = s -> System.out.println(s);
printer.accept("Hello Consumer");
Predicate<T>
.test(T) 실행 Predicate<Integer> isEven = x -> x % 2 == 0;
System.out.println(isEven.test(4)); // true
numbers.stream().forEach(x -> System.out.println("[1] " + x));
List<Integer> doubled = numbers.stream()
.map(x -> x * 2)
.collect(Collectors.toList());
System.out.println("[2] " + doubled);
numbers.stream()
.map(x -> x * 2)
.forEach(x -> System.out.println("[3] " + x));
numbers.stream()
.filter(x -> x % 2 == 0)
.forEach(x -> System.out.println("[4] " + x));
numbers.stream().sorted()
.forEach(x -> System.out.println("[5.1] " + x)); // 오름차순
numbers.stream().sorted(Comparator.reverseOrder())
.forEach(x -> System.out.println("[5.2] " + x)); // 내림차순
List<Integer> unique = numbers.stream().distinct().collect(Collectors.toList());
System.out.println("[6] " + unique);
numbers.stream().limit(5).forEach(x -> System.out.println("[7] " + x));
int sum = numbers.stream().reduce(0, (x, y) -> x + y);
System.out.println("[8.1] 합계 = " + sum);
int product = numbers.stream().reduce(1, (x, y) -> x * y);
System.out.println("[8.2] 곱 = " + product);
int min = numbers.stream().reduce(Integer.MAX_VALUE, (x, y) -> x < y ? x : y);
System.out.println("[8.3] 최소값 = " + min);
int max = numbers.stream().reduce(0, (x, y) -> x > y ? x : y);
System.out.println("[8.4] 최대값 = " + max);
parallelStream() 사용 가능 (단, 항상 빠른 건 아님) ⚡ 정리:
Java 람다식은 메서드를 간단히 표현하는 문법이고, Stream API는 데이터를 함수형 스타일로 처리하는 도구임.
두 개념을 함께 사용하면 코드가 짧아지고 유지보수가 쉬워짐.