[모던 자바 인 액션] - 4장 스트림 소개

슽이·2024년 5월 8일
0

스트림이란?

  • JAVA8 API에 새로 추가된 기능.

  • 스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다.

  • JAVA8의 스트림 API의 특징

    • 선언형 : 더 간결하고 가독성이 좋아진다.
    • 조립할 수 있음 : 유연성이 좋아진다.
    • 병렬화 : 성능이 좋아진다.
  • 스트림이란?? : 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소.

  • 주요 특징 2가지

    • 파이프라이닝 : 스트림 연산끼리 연결해서 커다란 파이프라인을 구성할 수 있도록 스트림 자신을 반환한다. (5장에서 다시)
    • 내부 반복 : 뒤에서 다시

컬렉션과 스트림

  • 컬렉션 : 데이터중심
  • 스트림 : 연산중심
  • 컬렉션은 명시적 반복한다.
//menu 리스트를 순회하면서 dish의 name을 가져와라..!!
for(Dish dish : menu){
	dish.getName();
}
  • 스트림의 내부반복
//데이터 표현과 하드웨어를 활용한 병렬성 구현을 자동으로 선택한다. 반면 외부 반복에서는 병렬성을 스스로 관리해야 한다.(synchronized)
menu.stream()
	.map(Dish::getName)
	.collect(toList());
  • 스트림 연산
    • 중간연산 : filter, sorted 같은 중간 연산은 다른 스트림을 반환한다.
      이를 연결해서 질의를 만들 수 있다.
      스트림의 게으른 특성 덕분에 다른 연산들을 한 과정으로 병합될 수 있다.
    List<String> names = menu.stream()
            .filter(dish -> {
              System.out.println("filtering " + dish.getName());
              return dish.getCalories() > 300;
            })
            .map(dish -> {
              System.out.println("mapping " + dish.getName());
              return dish.getName();
            })
            .limit(3)
            .collect(toList());
        System.out.println(names);

        filtering:port
        mapping:pork
        filtering:beef ....
        mapping:beef
  • 최종연산 : 파이프라인의 결과를 도출한다. List, Map 등 스트림 이외의 결과가 반환된다.
  • 5장에서 더 자세히…!
profile
하고싶은게 많은 개발자가 되고싶은

0개의 댓글

관련 채용 정보