반응형
자바 스트림이란 리스트나, 배열 같은 저장 요소를 for(이터레이터)를 사용하지 않고, 람다식이라는 함수적 스타일을 활용해서 데이터 처리를 할 수 있습니다. 이런 이야기만 듣고 보기에는 이해하기 어려우니 코드를 먼저 살펴 보겠습니다.
기본 샘플)
List<String> list = Arrays.asList("홍길동", "신용권", "감자바");
// Iterator 이용
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String name = iterator.next();
System.out.println(name);
}
System.out.println();
// Stream 이용
Stream<String> stream = list.stream();
stream.forEach(name -> System.out.println(name));
Iterator를 사용하면 반복문을 사용하여 하나씩 접근 하였습니다.
하지만, stream을 활용하면 반복문 없이 리스트 데이터를 처리할 수 있습니다. 위의 내용은 단순히 리스트 출력을 하였는데 아래 코드는 조금더 복작합 작업을 진행합니다.
샘플2)
List<Student> list = Arrays.asList(
new Student("홍길동", 90),
new Student("신용권", 92)
);
Stream<Student> stream = list.stream();
stream.forEach(s -> {
String name = s.getName();
int score = s.getScore();
System.out.println(name + "-" + score);
});
list문의 stream을 열어서 s라는 변수의 각각의 객체를 받아서 처리를 진행합니다.
스트림의 장점은 병렬 처리를 통해서 더 빠른 처리를 할 수 있습니다. 병렬 처리는 하나의 코어로 처리하는 것이 아닌 다수의 코어로 작업을 나눠서 진행하기 때문에 단순 반복문 처리보다 더 빠른 속도를 낼 수 있습니다.
샘플3)
List<String> list = Arrays.asList("홍길동", "신용권", "감자바", "람다식", "박병렬");
// 순차 처리
Stream<String> stream = list.stream();
stream.forEach(ParallelExample :: print);
System.out.println();
// 병렬 처리
Stream<String> parallStream = list.parallelStream();
parallStream.forEach(ParallelExample :: print);
병렬 처리를 하면 더 빠른 속도를 낼 수 있지만, 병렬 처리 후 마지막에 합쳐지기 때문에 순서는 보장 받을 수 없습니다.
이점은 주의를 해주셔야 겠습니다.
코드 내용)
이것이 자바다 (신용권의 Java 프로그래밍 정복)
반응형
'Programming > JAVA' 카테고리의 다른 글
[자바] java stream(스트림) 필터링(distinct, filter) 및 매핑(map) (0) | 2022.03.29 |
---|---|
[자바] java stream(스트림) 파이프라인과 리덕션이란? (0) | 2022.03.28 |
[java] Exception in thread "main" java.net.MalformedURLException: no protocol 자바 에러 (0) | 2021.03.26 |
[java] spring boot 실행 시 Permission denied 에러 (on linux) (0) | 2021.02.11 |
[java] 자바 HttpResponse 후 HttpEntity값 받기 (0) | 2021.02.04 |