본문 바로가기
프로그래밍/Java

스트림(Stream)

by freeelifee 2021. 12. 10.
728x90

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html

 

Stream (Java Platform SE 8 )

A sequence of elements supporting sequential and parallel aggregate operations. The following example illustrates an aggregate operation using Stream and IntStream: int sum = widgets.stream() .filter(w -> w.getColor() == RED) .mapToInt(w -> w.getWeight())

docs.oracle.com

 

1. 자바 8부터 컬렉션의 요소를 람다식으로 처리할 수 있게 해주는 반복자임.

List<String> list = Arrays.asList("JSP", "PHP");

// Iterator 반복자를 이용한 방법
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String str = iterator.next();
    System.out.println(str);
}

// for문을 이용한 방법
for (int i=0; i<list.size(); i++) {
    String str = list.get(i);
    System.out.println(str);
}

// 자바 8 이후 스트림을 이용한 방법
Stream<String> stream = list.stream();
stream.forEach(str -> {
    System.out.println(str);
});

 

2. 내부 반복자 사용으로 병렬 처리가 쉬움.

// parallelStream() 메소드 사용으로 병렬 처리됨.
Stream<String> stream = list.parallelStream();
stream.forEach(str -> {
    System.out.println(str + " : " + Thread.currentThread().getName());
});

3. 중간 처리와 최종 처리 작업 수행이 가능함.

중간 처리 : 필터링, 매핑, 정렬을 수행.

  필터링 : 

  매핑 : 스트림의 요소를 다른 요소로 대체하는 작업. flatMapXXX(), mapXXX(), asXXXStream(), boxed()

최종 처리 : 반복, 카운팅, 평균, 총합 등 집계 처리를 수행.

List<String> listCityName = Arrays.asList("서울", "대전", "부산", "천안", "인천", "서울", "부산");

listCityName.stream()
.distinct()  // 중간처리 : 중복제거
.forEach(s -> System.out.println(s));

(결과)
서울
대전
부산
천안
인천

listCityName.stream()
.filter(s -> s.equals("서울"))  // 중간처리 : 조건 필터링
.forEach(s -> System.out.println(s));

(결과)
서울
서울

listCityName.stream()
.distinct()  // 중간처리 : 중복제거
.filter(s -> s.equals("서울"))  // 중간처리 : 조건 필터링
.forEach(s -> System.out.println(s));

(결과)
서울
728x90

'프로그래밍 > Java' 카테고리의 다른 글

이클립스 SVN LOCK 해제하기  (0) 2023.01.18
이클립스, STS 메모리 설정  (0) 2023.01.18
람다식(Lambda Expressions)  (0) 2021.11.09