반응형

[Java] 스트림(Stream) 사용 방법 및 예제

 

자바 스트림 (Stream)

자바의 스트림(Stream)은 'Java 8' 부터 지원되기 시작한 기능이다. 스트림은 컬렉션에 저장되어 있는 Element들을 하나씩 순회하면서 처리하는 패턴이다. 람다식과 함께 사용되면서 컬렉션에 들어있는 데이터에 대한 처리를 간결하게 표현하여 작성할 수 있다는 장점이 있다. 내부 반복자를 사용하여 병렬처리가 쉽다. 

 

Java 8 이전에는 for문이나 Iterator 를 사용하여 순회하였다. 컬렉션을 순회하며 값을 출력한다는 단순한 동작에 지저분한 코드들이 많이 생성되었다. 이때, for each 문을 사용하면 좀더 간결해진다. 

 

1. 스트림 생성

List<String> list = {"a", "b", "c"};
Stram<String> stream = list.stream();

컬렉션 객체에서 stream() 메소드를 호출하면 위와 같이 스트림 객체를 생성할 수 있다. 

 

2. 스트림 생성 - build() 

String<String> stream = Stream<String>builder()
                            .add("a")
                            .add("b")
                            .add("c")
                            .add("d")
                            .build();

위와 같이 만들어진 스트림 객체는 a, b, c, d 순서대로 문자열 데이터를 처리하게 된다. 

 

3. 스트림 생성 - Generator 

데이터를 생성하는 람다식을 이용하여 스트림 객체를 생성할 수 있다. list 데이터에서 limit을 걸어 갯수 제한도 가능하다. 

delDuplicationList = delDuplicationList.stream()
                           .limit(10)
                           .collect(Collectors.toList());

중복을 제거하는 delDuplicationList 에 limit 10으로 상위 10건의 리스트 데이터만 가져올 수 있다. 

 

4. 스트림 생성 - Iterator 

Stream<String> stream = Stream.iterator(100, n -> n + 10).limit(5);

 

5. 스트림 생성 - max, min 

이전에는 for문을 사용하여 list를 돌며 max value와 min value를 출력해야했는데, java 8 이후, stream 덕분에 쉽게 출력할 수 있게 되었다. 

int maxValue = list
            .stream()
            .max(Comparator.comparing(AResponse::getPrice))	// Price의 max
            .orElseThrow(NoSuchElementException::new);
            
int minValue = list
            .stream()
            .min(Comparator.comparing(AResponse::getPrice))	// Price의 min
            .orElseThrow(NoSuchElementException::new);

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기