지금까지 우리는 많은 수의 데이터르 다룰 때 , 컬렉션이나 배열에 데이터를 담고 원하는 결과흫 얻기 위해 for문과 iterator
를 이용해서 코드를 작성 해왔다. 그러나 이러한 방식으로 작성된 코드는 너무 길고 알아보기 어렵다. 또한 재사용성도 떨어진다.
또 다른 문제는 데이터 소스마다 다른 방식으로 다워야한다는 것이다. collection이나 Iterator와 같은 인터페이스를 이용해서 컬렉션
을 다루는 방식을 표준화 하기는 했지만 , 각 컬렉션 클래스에는 같은 기능의 메서드들이 중복해서 정의되어 있다. 예를 들어 List를 정렬할 때는 Collections.sort()를 사용해야 하고, 배열을 정렬할 때 는 Arrays.sort()를 사용해야 한다.
이러한 문제점들을 해결하기 위헤ㅐ서 만든것이 스트림이다. 스트림은 데이터소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓았다. 데이터 소스를 추상화 하였다는 것은 데이터 소스가 무엇이던 간에 같은 방식으로 다룰 수 있게 되었다는 것과 코드의 재사용성이 높아진다는 것을 의미한다.
스트림을 이용하면, 배열이나 컬렉션뿐만 아니라 파일에 지정된 데이터도 모두 같은 방식으로 디룰수 있다.
예를 들어, 문자열 배열과 같은 내용의 문자열을 저정하는 List가 있을 때,
String[] strArr = { "aaa", "ddd", "ccc" };
List<String> strList = Arrays.asList(strArr) ; //배열을 list로
이 두 데이터 소스를 기반으로 하는 스트림은 다음과 같이 생성한다.
Stream<String> strStreaml = strList.stream() ; // 스트림을 생성
Stream<String> strStream2 = Arrays.stream (strArr) ; // 스트림을 생성
이 두 스트림으로 데이터 소스의 데이터를 읽어서 정렬하고 화면에 출력하는 방법은 다음
과같다. 데이더소스가 정렬되는것은아니라는것에유의하자
-자바의 정석 p.823
---------------------------------------------------------------------------------------------------------------------------
스트림이란?
스트림(Stream)은 자바 8 부터 추가된 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다.
반복자 스트림
자바7 이전까지는 List<String> 컬렉션에서 요소를 순차적으로 처리하기 위해 Iterator 반복자를 다음과 같이 사용해왔다
List<String> list = Arrays.asList("홍길동" , "감자바");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext() ) {
String name = iterator.next();
System.out.println(name);
}
이 코드를 Stream을 사용해서 변경한다면
List<String> list = Arrays.asList("홍길동", "감자바");
Stream<String> stream = list.stream();
stream.forEach(name -> System.out.println(name) );
- 이것이 자바다 p.782
'Java' 카테고리의 다른 글
Comparable , Comparator (0) | 2019.12.14 |
---|---|
달력 검색 (0) | 2019.12.14 |
Wrapper Class - AutoBoxing (0) | 2019.12.13 |
Anonymous class (0) | 2019.12.13 |
컬렉션 프레임워크 (0) | 2019.12.13 |