허원철의 개발 블로그

Java - Stream API 본문

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. 참고


'java' 카테고리의 다른 글

Java - Compare GC  (406) 2017.03.07
Java - GC (Garbage Collection)  (420) 2017.03.05
Java - Optional API  (415) 2017.02.19
Java - time package(LocalTime, LocalDate, LocalDateTime,...)  (398) 2017.02.07
Java - JUnit & AssertJ  (406) 2016.12.05
Comments