일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- load balancing
- assertj
- 비동기
- JPA
- Refactoring
- OAuth
- Spring
- g1
- gdg
- tomcat
- apache
- spring boot
- 페이징
- 스프링부트
- 권한
- 스프링 부트
- 클린코드
- 리팩토링
- Security
- RabbitMQ
- clean code
- Producer
- jvm
- 스프링
- 시큐리티
- GC
- JWT
- java
- oauth2
- 페이스북
Archives
- Today
- Total
허원철의 개발 블로그
Java - Stream API 본문
이번 글은 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