Java - Lambdas & Streams
Lambdas & Streams
Functional Interfaces
@FunctionalInterface interface Combiner { int apply(int a, int b); }
Combiner c = (a,b) -> a + b;
int r = c.apply(2,3);
Method References
java.util.function.Function f = Integer::parseInt;
 Stream Basics
import java.util.*;
import java.util.stream.*;
List xs = List.of(1,2,3,4,5);
int sumOfSquares = xs.stream()
  .map(x -> x * x)
  .reduce(0, Integer::sum);
 Collecting
Map counts = xs.stream()
  .collect(Collectors.groupingBy(x -> x % 3, Collectors.counting()));
 Optional
Optional maybe = xs.stream().filter(x -> x > 10).findFirst();
int val = maybe.orElse(0);
 Parallel Streams (Use with Care)
- Only when work per element is heavy and data is large.
- Beware of thread-unsafe collectors or side effects.
Avoid stateful lambdas. Keep operations pure for correctness and easier reasoning.
  Try it
- Map a list of names to uppercase and collect to a Set.
- Compute the sum of squares of even numbers with streams.
- Transform a list into a map of value → frequency using Collectors.groupingBy.