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
- Javascript
- MariaDB
- oracle
- 자바
- SQL
- network
- Linux
- spring
- java
- 리눅스
- 티스토리챌린지
- API
- Python
- JPA
- top
- IntelliJ
- analytics4
- 명령어
- MongoDB
- git
- group by
- docker
- PostgreSQL
- rsync
- 트랜잭션
- 오블완
- mysql
- DBMS
- mssql
- 차이점
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 |