스트림
컬렉션이나 배열에 데이터를 담고 원하는 결과를 얻기위해 for문과 Iterator를 이용해 코드를 작성해왔다. 이러한 방식은 너무 길고 알아보기 어렵다. 그리고 재사용성도 떨어진다는 단점이 있다.
또 다른 문제는 데이터 소스마다 다른 방식으로 다루어야 한다는 것이다. 예를들어 List를 정렬할 때는 Collections.sort()를, 배열을 정렬할 때는 Arrays.sort()를 사용해야 한다.
이러한 문제들을 해결하기 위해 스트림이 만들어졌다.
스트림은 데이터소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓았다. 데이터 소스가 무엇이던 간에 같은 방식으로 다룰 수 있게 되었다는 것과 코드의 재사용성이 높아진다는 것을 의미한다. 스트림을 이용하면 배열이나 컬렉션 뿐 아니라 파일에 저장된 데이터도 모두 같은 방식으로 다룰 수 있다.
1
2
3
4
5
6
7
8
9
String[] strArr = { "aaa", "bbb", "ccc" };
List<String> strList = Arrays.asList(strArr);
//위를 스트림으로.
Stream<String> strStream1 = strList.stream();
Stream<String> strStream2 = Arrays.stream(strArr);
strStream1.sorted().forEach(System.out::println);
strStream2.sorted().forEach(System.out::println);
스트림은 데이터 소스를 변경하지 않는다.
- 스트림은 일회용이다.
- iterator처럼 일회용이다. 한번 사용하면 닫혀서 다시 사용할 수 없다.
- 스트림은 작업을 내부반복으로 처리한다.
- 메서드의 내부에 반복문을 숨길수 있다는 것을 의미한다.