Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- tmehz
- 이중우선순위큐
- 추가합격
- 프로시저
- JsonObect
- SQL
- RequiredArgsConstructor
- window
- 삼성 #교육 #개발자 #웹
- UnsupportedOperationException
- 백준
- 의존성주입
- 프로젝트회고록
- 커밋옮기기
- SSAFY #싸피 #7기 #합격 #개발
- commit
- mybatis
- SSAFY
- 면접합격
- Java
- gitlab
- BFG
- 싸피
- BOJ
- 백엔드
- treeset
- IntelliJ
- pymysql
- github
- 윈도우우분투
Archives
- Today
- Total
데굴데굴 굴러가는 개발 블로그
[JAVA] Stream을 활용한 list 필터링 본문
💡 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 |