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 |
Tags
- github
- TIOBE
- gtihub
- UNION ALL
- visual studio code
- analytics4
- JPQL
- Jenkins
- pat발급
- db종류
- EntityManager
- MariaDB
- spring
- ci/cd
- IntelliJ
- 티스토리챌린지
- 르세라핌
- Python
- jetbrain
- ANTIFRAGILE
- java
- JPA
- 명령어
- docker
- 오블완
- 애널리틱스4
- 자동배포
- git pat
- git branch 삭제
Archives
- Today
- Total
hanker
JAVA - stream 본문
반응형
Java의 Stream은 Java 8에서 도입된 기능으로, 데이터 컬렉션(List, Set, Map 등) 또는 배열에 대해 다양한 연산을 처리할 수 있다.
Stream은 중간 연산(Intermediate Operation)과 최종 연산(Terminal Operation)으로 나뉜다.
중간연산은 조건, 최종연산은 결과 값이다.
1. 중간 연산 (Intermediate Operation)
- filter(Predicate<T>): 조건에 맞는 요소만을 필터링
- map(Function<T, R>): 요소를 다른 타입으로 변환
- sorted(): 요소를 정렬
- distinct(): 중복 요소 제거
- limit(long n): 처음 n개만을 추출
- skip(long n): 처음 n개를 건너뜀
2. 최종 연산 (Terminal Operation)
- forEach(Consumer<T>): 각 요소를 순회하면서 동작 수행
- collect(Collector<T, A, R>): 결과를 List, Set, Map 등으로 수집
- count(): 요소의 개수를 반환
- reduce(BinaryOperator<T>): 요소를 누적하여 하나의 값으로 변환
- findFirst(), findAny(): 첫 번째 요소 또는 임의의 요소를 반환
- allMatch(Predicate<T>), anyMatch(Predicate<T>), noneMatch(Predicate<T>): 조건을 만족하는지 여부를 검사
이해를 위해 예제를 보면서 확인하자
List<Map<String, Object>> list = new ArrayList<>();
String[] name = {"김철수", "김민수", "이재훈", "박상현", "허진", "john"};
String[] age = {"22", "31", "27", "23", "25", "33"};
String[] gender = {"male", "female", "female", "male", "male", "male"};
String[] country = {"korea", "korea", "korea", "korea", "korea", "USA"};
for(int i = 0; i < name.length; i++) {
Map<String ,Object> map = new HashMap<>();
map.put("name", name[i]);
map.put("age", age[i]);
map.put("gender", gender[i]);
map.put("country", country[i]);
list.add(map);
}
- 예제 데이터 생성
filter()
Gender가 'male'인 경우 또는 country가 'korea'인 경우
List<Map<String, Object>> result = list.stream()
.filter(map -> map.get("gender").equals("male"))
.filter(map -> map.get("country").equals("korea"))
.collect(Collectors.toList());
결과.
map()
'name' 키와 연관된 값으로 매핑
List<Object> result = list.stream()
.filter(map -> map.get("gender").equals("male"))
.map(map -> map.get("name"))
.collect(Collectors.toList());
결과.
sorted()
정렬
List<Object> result = list.stream()
.sorted(Comparator.comparing(map -> Integer.parseInt(map.get("age").toString())))
.collect(Collectors.toList());
distinct()
성별 중복제거
List<Map<String, Object>> result = list.stream()
.collect(Collectors.toMap(
map -> map.get("gender"), // keyMapper: age 값을 key로 사용
map -> map, // valueMapper: 현재 map을 value로 사용
(existing, replacement) -> existing // 중복 발생 시 기존 값 사용
)).values()
.stream()
.collect(Collectors.toList());
결과.
limit()
2개만 출력
List<Map<String, Object>> result = list.stream()
.limit(2)
.collect(Collectors.toList());
결과.
skip()
처음 2개 건너뛰고 출력
List<Map<String, Object>> result = list.stream()
.skip(2)
.collect(Collectors.toList());
결과.
끝.
반응형
'JAVA' 카테고리의 다른 글
Java - (Window/Linux) 디렉터리 목록 가져오기 (1) | 2024.09.20 |
---|---|
JAVA - Lambda (java 8) (0) | 2024.09.15 |
JAVA - HttpUrlConnection, HttpsUrlConnection (httpMethod GET, POST) (1) (0) | 2024.09.11 |
JAVA - HttpUrlConnection, HttpsUrlConnection (0) | 2024.09.10 |
JAVA - HTML String값 특정 태그 변경 (1) | 2024.09.07 |