서론
안녕하세요. 방구석 개발자 입니다.
실무에 사용하고자 StreamAPI 를 공부하고 적용시키려고 합니다.
그래서 사용한 예제를 몇가지 포스팅하겠습니다.
제가 사용한 예제는 공부목적으로 작성하였고 자바공식문서를 보면 더욱 더 많은 메소드가 있습니다.
또한 JAVA Stream API 는 간혹 기존 코드 보다 성능이 떨어진다는 이야기가 많습니다.
실무에 적용 할때는 더욱 주의 해야 될 거 같습니다.
StreamAPI 이란?
스트림api는 자바8 부터 추가된 기능으로 컬렉션, 배열 등의 저장 요소를 하나씩 참조하며 함수형 인터페이스(람다식)를적용하며 반복적으로 처리할 수 있도록 해주는 기능입니다.
기존 코드 보다 가독성이 좋고 사용하기 편하게 되어 있습니다.
Stream 의 구조는 크게 3가지로 나뉩니다.
- 스트림 생성
- 중개 연산
- 최종연산
이렇게 보면 너무 어려워서 사용 방법를 보면서 익히는게 더 좋아보입니다. 사용 방법 보시죠!
사용 방법
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class StreamAPI {
public static void main(String[] args) {
List<String> names = Arrays.asList("이승민","홍길동","김철수","강민수","고영희","차수박","신영수","김태우","김이나", "이승민");
//list 복사
List<String> sortingNames = names.stream().collect(Collectors.toList());
//Stream 검색
names.stream().filter(x -> x.contains("이")).forEach(x-> System.out.println("이 글자가 포함된 이름 : "+x));
//Stream filter 여러개
names.stream().filter(x -> x.contains("이")).filter(x -> x.contains("민")).forEach(x-> System.out.println("이,민 글자가 포함된 이름 : "+x));
//count 확인
long count = 0;
count = names.stream().count();
System.out.println("Count : " + count);
//문자열에 추가 또는 삭제 또는 수정 map을 사용한다.
names.stream().map(x -> x.concat(" 이름 뒤에 붙은 문자열 : ")).forEach(x -> System.out.println(x));
//개수 정하기
names.stream().limit(5).forEach(x -> System.out.println("limit5 : "+x));
//정렬
names.stream().sorted().forEach(x -> System.out.println("정렬 : "+x));
names.stream().sorted(Comparator.reverseOrder()).forEach(x -> System.out.println("역순 정렬 : "+x));
//중복 제거
names.stream().distinct().forEach(x -> System.out.println("중복제거 : "+x));
//최대, 최소값 구하기
names.stream().min(Comparator.naturalOrder()).ifPresent(x-> System.out.println("최소값 : "+x));
names.stream().max(Comparator.naturalOrder()).ifPresent(x-> System.out.println("최대값 : "+x));
}
}
list 복사는 collect()함수를 사용합니다.
filter 함수를 사용하여 특정문자열로 뽑을 수 있습니다.
개수를 보고싶으면 count() 함수를 사용합니다.
정렬은 sorted() 메소드를 역정렬은 sorted(Comparator.reverseOrder())를 사용합니다.
중복제거는 distinct() 함수
최대, 최소값을 구할땐 min() , max() 함수를 사용합니다.
해당 사용 방법을 보면 계속 .(~).(~) 형태로 이어지는데 이것을 파이프 라인이라고 합니다. 다중 연산을 할 수 있습니다.
참고 자료
Java performance tutorial – How fast are the Java 8 streams?
Java 8 Friday: 10 Subtle Mistakes When Using the Streams API
'프로그래밍 > Java & Spring' 카테고리의 다른 글
configuration test 대체하기 (0) | 2022.05.07 |
---|---|
스프링 이벤트 프로그래밍 적용하기 (0) | 2022.05.07 |
@SpringBootTest @Transactional rollback (0) | 2022.03.13 |
Spring4 Junit 테스트 코드 작성기 (0) | 2021.09.20 |
ThreadPoolTaskScheduler를 이용하여 자바 스케줄러 구현 및 강제종료 구현 (0) | 2021.08.02 |
댓글