데굴데굴 굴러가는 개발 블로그

[JAVA] Stream을 활용한 list 필터링 본문

개발/Java

[JAVA] Stream을 활용한 list 필터링

Daram-e 2024. 5. 7. 16:36

💡 Stream이란?  

Java8 버전 이상부터 사용 가능하며, 람다식을 이용해 데이터(컬랙션, 배열 등..)를 가공하여 원하는 형태로 반환할 수 있다.

 

💡 대표적인 특징  

1. 원본 데이터의 변경 X

2. 재사용 불가능 (일회용)

3. 내부 반복으로 작업을 수행 (간결한 소스코드로 바뀌는 이유)

 

💡Stream 처리 과정

- Stream 생성

- 중간 연산

- 최종 연산

ex. 객체.Stream생성().중간연산().최종연산

 

다양한 Stream생성 방식이 있지만, 지금은 List 관련한 부분만 작성한다.

 

💡중간 연산

- 필터 (filter, distinct)

- 변환 (map, flatMap)

- 제한 (limit, skip)

- 정렬 (sorted)

- 확인 (peek)

 

💡필터

- filter() : 특정 조건에 맞는 결과를 필터링

- distinct() : 중복을 제거한 결과값 반환

// filter()
List<String> list = new ArrayList<>(Arrays.asList("apple","cherry","apple","peer","orange"));
Stream<String> stream = list.stream().filter(item -> item.equals("apple")); // apple 요소 찾기
list = stream.collect(Collectors.toList()); // return ["apple","apple"]

// distinct()
List<String> list = new ArrayList<>(Arrays.asList("apple","cherry","apple","peer","orange"));
Stream<String> stream = list.stream().distinct();	// 중복요소 제거
list = stream.collect(Collectors.toList()); // return ["cherry","peer","orange"]

 

💡변환

- map() : 특정 요소를 원하는 값으로 변환

- flatMap() : 중복된 스트림을 평면화하여 반환

// map()
List<String> list = new ArrayList<>(Arrays.asList("cherry","peer","orange"));
Stream<String> mapStream = list.stram().map(item -> "fruit name ::" + item);
list = mapStream.collect(Collectors.toList()); // return ["fruit name : cherry", "fruit name : peer", "fruit name : orange"]

 

💡제한

- limit() : 개수를 제한해서 반환

- skip() : 시작부터 n개의 요소를 제외해서 반환

 

💡정렬

- sorted() : 배열, 리스트 , Object에 대해 오름/내림차순으로 정렬해서 반환

// sorted()
List<String> list = new ArrayList<>(Arrays.asList("c","a","d","b");
Stream<String> stream1 = list.stream().sorted(Comparator.naturalOrder());	// 오름차순
Stream<String> stream2 = list.stream().sorted(Comparator.reverseOrder());	// 내림차순
Stream<String> stream3 = list.stream().sorted((a,b) -> b.compareTo(a));	// 내림차순

list = stream.collect(Collectors.toList()); // return ["a","b","c","d"]
list = stream.collect(Collectors.toList()); // return ["d","c","b","a"]
list = stream.collect(Collectors.toList()); // return ["d","c","b","a"]

 

 

💡확인

- peek() : 각 요소를 조회 (추출x, Stream의 요소만 조회) -> 주로 중간연산값을 디버깅하기 위해 활용

List<String> list = new ArrayList(Arrays.asList("apple","orange","peer"));
Stream<String> stream = list.stream()
							.peek(System.out::println)
                            .map(item -> "국산 + item)
                            .peek(item -> System.out.lrintln("결과: "+ item))
                            .map(item -> item + 입니다.)
// return 
apple
결과 : 국산 apple
orange
결과 : 국산 orange
peer
결과 : 국산 peer

 

 

 

 

'개발 > Java' 카테고리의 다른 글

[Java/Mybatis] java.lang.UnsupportedOperationException  (1) 2024.01.05
[JAVA] JsonObject 데이터 다루기  (0) 2023.10.27