java
Java - Stream API
허원철
2016. 12. 5. 07:56
이번 글은 Java 1.8 에 새롭게 등장한 Stream 입니다.
데이터를 만들고, 가공하고 처리하기 위해서 Collection 을 이용해왔습니다.
하지만, 자바 1.8 이상 버전부터는 Stream API를 이용하여 보다 깔끔하게 할 수 있습니다.
1. Compare...
- 자바 1.7, 1.6, 1.5 에서 흔히 볼 수 있는 소스 코드입니다.
- 자바 1.8 부터 사용가능 하게된 Stream과 람다식 표현을 이용한 소스 코드입니다.
- 일단 두 코드에 대해서 결과값을 비교하자면, 동일한 값입니다.
- 17~19 Line => 35 Line : 데이터를 넣어주고,
- 21~23 Line => 36 Line : 값을 변환해주고,
- 25~28 Line => 36, 37 Line : 필터와 카운팅을 해줍니다.
2. How
- 어떻게 쓰이는지 간략하게 적어 보겠습니다.
① Stream 생성
- Collection 객채.stream()
- File.lines()
- BufferdReader.lines()
- Arrays.stream()
- Random.( doubles, ints, longs )
- Stream( IntSteam, DoubleStream, LongStream ). ( range, generate, iterate, ...)
② Stream 변환
- map : 데이터 변환
- filter : 조건 필터
- flatMap : 1:N Stream 생성
- skip : 처음 N개 제외
- limit : 마지막 N개 제외
- mapToInt(), mapToLong, mapToDouble
③ Stream 생성
- sorted, sorted(Comparator) : 정렬
- distinct : 중복제거
- forEach
- count : 갯수
- max : 최대
- min : 최소
- allMatch, anyMatch, noneMatch : 일치하는 여부
- IntSteam, DoubleStream, LongStream
- sum : 합계
- min : 최소
- max : 최대
- average : 평균
- reduce : 복잡한 형식의 결과(고차원적 함수)
- collect : Collectors.toList(), Collectors.toSet(), Collectors.toMap(), Collectors.groupingBy(), Collectors.partioningBy(), ...
- parallelStream() : 병렬처리가 가능하다. 동시에 다수 쓰레드가 각각의 메소드를 실행하고 결과적으로 생성된 값을 stream으로 생성한다.(멀티 코어 처리)
3. Result
- 빠르다.
- 메소드명 자체가 단순 명확하여 가독성이 높다.
- 추가적으로, 람다식 표현이 더해져 코드를 좀 더 간결하게 볼 수 있습니다.
4. 참고