반응형
이 카테고리를 따로 생성하게 된 이유는 Stream에서 사용되는 메서드들을 다루기 위함이다
1. Stream 이란?
- 컬렉션(배열 포함)의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다
2. Stream의 특징?
2.1 람다식으로 요소처리 코드를 제공한다
2.2 내부 반복자를 사용하므로 병렬 처리가 쉽다
- 내부 반복자 : 컬렉션 내부에서 요소들을 반복시키고, 개발자는 요소당 처리해야할 코드만 제공하는 코드 패턴
-> 개발자는 요소 처리 코드에만 집중 할 수 있다는 장점이 있다
-> 컬렉션의 parallelStream() API를 사용하면 요소들을 분배시켜 병렬 작업이 가능하다
- 외부 반복자 : 개발자가 코드로 직접 컬렉션의 요소를 반복해서 처리하는 코드 패턴
ex) for, while문을 이용한 처리
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("kim","nam","lee");
// 외부 반복자
for(String name: names) {
System.out.println(name);
}
// 내부 반복자
names.stream().forEach(name -> System.out.println(name));
names.stream().forEach(System.out::println);
}
}
2.3 Stream은 중간 처리와 최종 처리를 할 수 있다
- Stream API인 filter(), map(), sorted() 등이 중간 처리이고, forEach(),count(),max(),average() 등의 집계처리는 최종 처리이다.
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("kim","nam","lee");
// 중간 처리 - sorted, 최종처리 - forEach
names.stream().sorted().forEach(name -> System.out.println(name));
// 중간 처리 - map, 최종처리 - forEach
names.stream().map(n -> n+"!").forEach(System.out::println);
}
}
개인적 Stream 사용 후기
- Stream은 잘 사용한다면 코드를 깔끔하고 직관성 있고 효율성있게 작성할 수 있다.
- 다만 Stream에 너무 집착하면 안 된다.
- for, while문을 이용해 stream을 사용했을 때보다 더 효율적이고 직관적인 코드를 작성할 수도 있다.
반응형
'JAVA > Stream' 카테고리의 다른 글
Java 8 stream - forEach() (0) | 2021.09.08 |
---|