본문 바로가기
Java

Stream

by bloodFinger 2019. 12. 14.

지금까지 우리는 많은 수의 데이터르 다룰 때 , 컬렉션이나 배열에 데이터를 담고 원하는 결과흫 얻기 위해 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