반응형
💻 1. Java Stream API 활용법
Java의 Stream API는 데이터 처리를 정말 편리하게 해주는 도구입니다. 데이터를 필터링, 매핑, 정렬, 수집하는 작업을 간단하게 할 수 있죠. 여기서 Stream을 어떻게 활용할 수 있는지, map과 mapToInt의 차이점, Collectors의 사용법, 그리고 복잡한 구조를 Stream으로 처리하는 방법에 대해 알아보겠습니다.
🔹 Stream 활용법: 기본적인 사용 방법
Stream은 컬렉션(예: List, Set, Map)이나 배열의 데이터를 순차적으로 처리할 수 있는 기능입니다. 이를 활용하면 반복문 없이 간단하게 데이터를 조작할 수 있습니다.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// 스트림을 사용한 필터링과 매핑
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("A"))
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(filteredNames); // [ALICE]
🔹 map과 mapToInt의 차이점
map
과 mapToInt
는 모두 스트림에서 요소를 변환하는 역할을 합니다. 하지만 중요한 차이점이 있습니다.
map
: 모든 타입의 Stream을 변환할 수 있습니다. 예를 들어,Stream<String>
을Stream<Integer>
로 변환할 수 있죠.mapToInt
: 정수형 스트림(IntStream)으로 변환합니다. 그래서 주로 숫자 연산이 필요할 때 사용됩니다.
List<String> numbers = Arrays.asList("1", "2", "3");
// map 예시: String -> Integer 변환
List<Integer> intNumbers = numbers.stream()
.map(Integer::parseInt)
.collect(Collectors.toList());
// mapToInt 예시: String -> int 변환
int sum = numbers.stream()
.mapToInt(Integer::parseInt)
.sum();
System.out.println(sum); // 6
🔹 Collectors와 Stream 관련
Stream의 결과를 원하는 형태로 수집하려면 Collectors를 사용합니다. 여기서는 Collectors.toList()
와 Collectors.toCollection()
의 차이점, 그리고 Stream을 사용해 List를 Deque나 Queue로 변환하는 방법을 살펴보겠습니다.
Collectors.toList()와 Collectors.toCollection()의 차이점
Collectors.toList()
: Stream의 결과를 List로 수집합니다. 기본적인 리스트로 변환할 때 사용하죠.Collectors.toCollection()
: Stream의 결과를 원하는 컬렉션 타입으로 수집할 수 있습니다. 예를 들어,Deque
,Queue
, 또는PriorityQueue
같은 특정 컬렉션으로 변환할 수 있습니다.
Deque<String> deque = names.stream()
.collect(Collectors.toCollection(ArrayDeque::new));
PriorityQueue<String> priorityQueue = names.stream()
.collect(Collectors.toCollection(PriorityQueue::new));
이렇게 하면 Stream의 요소들을 Deque
나 PriorityQueue
같은 컬렉션으로 쉽게 변환할 수 있습니다.
🔹 중첩된 구조의 처리
Stream을 사용하면 복잡한 구조도 효율적으로 처리할 수 있습니다. 예를 들어, Map<List<Map<String, Object>>, Object>
같은 복잡한 구조에서도 특정 값을 가져올 수 있습니다.
Map<List<Map<String, Object>>, Object> complexMap = // 초기화된 복잡한 구조
// 특정 값을 가져오는 예시
Optional<Object> result = complexMap.entrySet().stream()
.flatMap(entry -> entry.getKey().stream())
.filter(innerMap -> "특정 키".equals(innerMap.get("key")))
.map(innerMap -> innerMap.get("value"))
.findFirst();
이 코드는 중첩된 구조에서 원하는 값을 효율적으로 추출할 수 있게 해줍니다.
💡 정리
- Stream: 데이터를 필터링, 매핑, 수집하는데 유용하게 사용됩니다.
- map과 mapToInt:
map
은 타입 변환,mapToInt
는 숫자 연산에 특화된 기능입니다. - Collectors: Stream의 결과를 다양한 컬렉션 형태로 수집할 수 있습니다.
- 복잡한 구조: Stream을 통해 복잡한 데이터 구조에서도 원하는 값을 쉽게 찾을 수 있습니다.
반응형
'Java' 카테고리의 다른 글
[JAVA] #Deque VS Queue #ArrayDeque VS LinkedList #Map (1) | 2024.09.06 |
---|---|
[JAVA] Java 메서드 참조 (0) | 2024.09.04 |
[JAVA] 자바 버전별 차이점 (0) | 2024.08.02 |
[JAVA] JAVA로 REST API 구현하기 (0) | 2024.07.19 |
[JAVA] String Boot에서 AOP를 활용한 로그인 시스템 구현방법 (0) | 2024.05.16 |