

자바 8에서 함수형 인터페이스, 람다, 메서드 참조라는 개념이 추가되면서 배열과 컬렉션을 더 간결하고 효과적으로 처리할 수 있게 되었다.
기존에는 List, Set, Map같은 컬렉션 데이터를 처리하려면 반복문을 사용해야 했다. 이는 코드가 길어지고 가독성이 떨어지는 문제가 있었다.
스트림은 데이터를 반복하면서 변화느 필터링, 집계 등을 쉽게 수행할 수 있어 가독성도 좋고 자주 사용되는 메서드를 정의해 놓아 코드의 재사용성도 높아진다.
스트림은 크게 스트림 생성, 스트림 가공(중간 연산), 스트림 결과 생성(최종 연산) 으로 나눌 수 있다.
데이터 소스에서 스트림 객체를 생성한다.
List<String> list = List.of("Hi", "Hello", "Bye");
Stream<String> stream = list.stream();
String[] array = new String[]{"Hi", "Hello", "Bye"};
Stream<String> stream = Arrays.stream(array);
Stream<String> builderStream = Stream.<String>builder()
.add("Hi").add("Hello").add("Bye")
.build();
스트림을 변환하거나 필터링한다.
Stream<String> stream = names.filter(s -> s.startsWith("a"));
Stream<String> stream = list.stream()
.map(String::toUpperCase);
// .map(String::length)
List<Integer> stream = list.stream()
.sorted()
// .sorted(Comparator.reverseOrder())
List<Integer> stream = list.stream()
.limit(n)
스트림의 데이터를 처리하고 결과를 반환하거나 특정 동작을 수행한다.
List<String> stream = names.stream()
.filter(name -> name.startsWith("A")
.collect(Collectors.toList());
names.stream()
.forEach(name -> System.out.println("Hello, " + name));
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
int sum = numbers.stream()
.reduce(0, Integer::sum); // 15
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
long count = numbers.stream()
.count(); // 5
[Java] 스트림(Stream) 정리
[Java] 자바 스트림(Streams)의 개념과 사용 방법
[Java] Stream API -1 이해하기: 용어 및 Stream 생성