스트림이란?
컬렉션에 저장되어 있는 엘리먼트들을 하나씩 순회하면서 처리할 수 있는 코드패턴
람다식과 함께 사용되어 컬렉션에 들어있는 데이터에 대한 처리를 매우 간결한 표현으로 작성
반복에서 스트림 연산으로 전환하기
스트림을 이용하면 필터링과 카운팅을 증명하기 위해 루프를 살펴볼 필요가 없다.
루프에서는 연산순서를 자세히 작성해야하지만, 스트림은 결과만 맞으면 연산을 스케줄링할 수 있다.
//filter메서드
//루프를 이용한 연산
int count = 0;
for (String w : words) {
if (w.lengh() >12) count++;
}
//스트림을 이용한 연산
long count = words.stream()
.filter(w -> w.length() >12)
.count();
스트림은 '어떻게가 아니라 무엇을'이라는 원칙을 따른다.
스트림 vs 컬렉션
스트림은 요소를 저장하지 않는다
요소는 스트림을 지원하는 컬렉션에 저장되거나 필요할 때 생성
스트림은 원본을 변경하지 않는다.
filter메서드는 원본에서 요소를 지우기보다는 해당 요소가 없는 새로운 스트림을 반환
스트림은 연산을 최대한 지연시켜둔다.
연산 결과가 필요하기 전까지는 실행되지 않음
스트림생성
Collection 인터페이스의 stream메서드를 이용하면 어떤 컬렉션이든 스트림으로 변환할 수 있다.
배열의 경우 정적 메서드 Stream.of를 이용
//배열
Stream<String> words = Stream.of(contents.split("/")); // split은 String[] 배열을 반환한다
map 메서드
스트림에 들어 있는 값을 특정 방식으로 변환
Stream<String> lowercaseWords = words.stream().map(String::toLowerCase);
스트림요소를 다른 타깃으로 모으기
//Stream -> List
List<String> result = stream.collect(Collectors.toList());
//Stream -> Map
Map<Integer, String> personMap
= Stream.collect(Collectors.toMap(Person::getId, Person::getName));
'JAVA(SPRINGBOOT)' 카테고리의 다른 글
[JAVA] REQULAR EXPRESSION(정규 표현식) (0) | 2022.12.16 |
---|---|
[JAVA] EXCEPTION(예외처리) (0) | 2022.12.16 |
[JAVA] INTERFACE(인터페이스) (0) | 2022.12.06 |
[JAVA] Hashmap (0) | 2022.11.01 |
[SPRING JPA] ORM, JPA, Hibernate (0) | 2022.09.13 |