-
[java] streamjava/java 공부 2022. 4. 2. 16:36
오랜만에 자바 복습할 스트림을 정리해보았습니다.
스트림이란?
데이터의 흐름을 의미
collection 형태로 구성된 데이터를 람다를 이용해 가나결하고 직관적으로 프로세스하게 해줌
stream을 사용하면 for, while 을 대체할 수 있음
병렬처리를 쉽게 할 수 있음
여러가지 중간 처리(스트림 종류)를 이어붙여서 사용하는것도 가능함
stream 종류
※ Filter : 만족하는 데이터만 걸러내는데 사용
Predicate 에 true 를 반환하는 데이터만 존재하는 stream 을 리턴
Stream<T> filter(Predicate<? supuer T> Predicate);
(사용 예)
List<Integer> filteredNumber = Stream.of(1, -2, 3, -4, 5, -6) .filter(x -> x > 0) .collect(Collectors.toList());
결과는 1, 3, 5 만 걸러져서 나옴
※ Map : 데이터를 변형하는데 사용
데이터에 해당 함수가 적용된 결과물을 제공하는 stream을 리턴
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
(사용 예)
List<Integer> numberList2 = Stream.of(2, 8, -2) .map(x -> x * 2) .collect(Collectors.toList());
결과는 4, 16, -4 가 나옴
※ sorted : 데이터가 순서대로 정렬된 stream 을 리턴
데이터 종류에 따라 Comparator가 필요할 수 있음
Stream<T> sorted(); Stream<T> sorted(Comparator<? super T> comparator);
(사용 예)
List<Integer> numbers = Arrays.asList(3, -2, 7, 5); List<Integer> sortedNumbers = numbers.stream() .sorted() .collect(Collectors.toList());
결과는 -2, 3, 5, 7 이 정렬되어 나옴
※ distinct : 중복된 데이터가 제거된 stream 을 리턴
Stream<T> distinct();
(사용 예)
List<Integer> integerList = Arrays.asList(3, 1, 2, 5, 1, 2, 7); List<Integer> distinctList = integerDistinctList.stream() .distinct() .collect(Collectors.toList());
결과는 3, 1, 2, 5, 7 이 나옴
※ FlatMap : 스트림의 스트림
Map + Flatten
데이터에 함수를 적용한 후 중첩된 stream 을 연결하여 하나의 stream 으로 리턴
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
'java > java 공부' 카테고리의 다른 글
[java] SimpleDateFormat 패턴 종류 (0) 2021.05.04