#컬렉션 프레임 워크
#컬렉션은 여러 데이터들의 집합을 나타내며,
#컬렉션 프레임워크는 특정 자료 구조에 데이터를 추가하고, 검색하고, 수정하고, 삭제하는 등의
메서드들을 미리 정의해놓고 이를 제공하는 기능이다.
#스트림
배열, 컬렉션의 저장 요소를 하나 씩 참조해서 '람다식'으로 처리할 수 있도록 해주는 반복자.
즉 List, Set, Map, 배열 등의 데이터들을 흐름에 따라 우리가 원하는 결과로 가공하고 처리할 수 있다.
#데이터 처리 연산을 지원하도록 #소스(컬렉션(List, Set), 배열)에서 추출된 #연속된 요소로 정의 한다.
#데이터 처리 연산
filter, map, reduce, find, match, sort 등의 메서드를 통해 데이터를 조작할 수 있다.
#소스
컬렉션(List, Set), 배열 등의 데이터 제공 소스로부터 데이터를 소비한다.
정렬된 컬렉션(List, Set)으로 스트림을 생성하면 정렬이 그대로 유지되며,
List로 스트림을 만들면 스트림의 요소는 List의 요소와 같은 순서를 유지한다.
#연속된 요소
특정 요소 형식으로 이루어진 연속된 값 집합의 인터페이스를 제공.
#컬렉션(List, Set)은 자료 구조이므로,
시간과 공간의 복잡성과 관련된 데이터 저장(add) 및 데이터 호출(get) 연산이 주를 이룬다.
#스트림은 filter, map, sorted처럼 표현 계산식이 주를 이루며,
정리하면 #컬렉션의 주제는 데이터이고, #스트림의 주제는 계산 이다.
[특징]
1. 원본 데이터 소스를 변경하지 않는다.
2. 일회용 이다.
3. 내부 반복자 이다.
#외부 반복자 : 개발자가 코드로 직접 작성해서 컬렉션 요소를 반복해서 가져오는 형태
#내부 반복자 : 데이터 처리 코드만 컬렉션 내부로 주입해서 처리하는 형태
[결론]
#컬렉션은 자료 구조에 따른 데이터를 다루는 메서드를 모아놓은 프레임워크 이고,
#스트림은 컬렉션의 데이터를 필요에 따라 가공하여 사용 처리하는 방법이다.
[사용 비교 예시]
조건 : 제품군 중에 가격이 10만원 미만의 제품들만 간추리고 싶다.
#컬렉션 사용
public class Main {
public static void main(String[] args) {
HashMap<String,Integer> product = new HashMap<>();
product.put("TV",100000);
product.put("AC",150000);
product.put("RR",80000);
product.put("Phone",60000);
for(Map.Entry<String, Integer> entry : product.entrySet()) {
int price = entry.getValue();
if (price < 100000) {
System.out.println(entry.getKey()+": "+price);
}
}
}
}
1. HashMap 객체를 생성하고 Key, Value의 데이터를 넣는다.
2. .entrySet() 메서드를 HashMap 객체 product에 사용하여
product의 Key-Value 데이터를 set 형태의 Map.Entry 타입인 entry 변수를 생성하여 할당.
3. 새로 생성된 product의 set 형태인 Map.Entry 객체를 사용해서 그 value만 가져와 int price를 만듬.
4. price를 비교값 100000이랑 비교하고 통과되면 해당하는 key 와 price를 출력한다.
#스트림 사용
public class Main {
public static void main(String[] args) {
HashMap<String,Integer> product = new HashMap<>();
product.put("TV",100000);
product.put("AC",150000);
product.put("RR",80000);
product.put("Phone",60000);
product.entrySet().stream()
.filter(e -> e.getValue() < 100000)
.forEach(e -> System.out.println(e.getKey()+": "+e.getValue()));
}
}
1. HashMap 객체 product 생성 후 Key, Value의 데이터를 넣는다.
2. stream()은 Map 인터페이스에는 사용이 안되고 컬렉션(List, Set) 인터페이스에서만 사용이 가능
3. 그래서 HashMap product를 set형태의 Entry.Map 객체로 바꿔서 stream을 사용한다.
4. stream() 메서드 중 filter(), forEach() 메서드로 원하는 데이터의 조건을 만들고 출력하여 구현.
>> 컬렉션 VS Stream 비교를 하면 Stream이 더 간결하고, 가독성이 좋다.
'백엔드 기술 > Java' 카테고리의 다른 글
컴파일(Compile)과 런타임(Runtime) (0) | 2023.04.20 |
---|---|
Java - Generic 제네릭이란 ? (0) | 2023.04.20 |
자료 구조에서 Array VS List (0) | 2023.04.18 |
List, Set, Map 의 차이점 (0) | 2023.04.18 |
생성자란 ? (0) | 2023.04.17 |