본문 바로가기

# 02/Java

[윤성우 열혈자바] 29-1. 스트림의 이해와 스트림의 생성

반응형

스트림(Stream) 이해


정화 파이프 A  24종의 유기 화합물을 걸러낸다.

정화 파이프 C  일반 세균과 대장균 그리고 입자상의 불순물을 제거한다.

플랑크 파이프  물고기가 살도록 적정량의 플랑크톤을 공급하는 파이프이다.


정화 파이프 A    정화 파이프 C    플랑크 파이프

정화 파이프 C    정화 파이프 A    플랑크 파이프

중간 파이프(중간 연산)        최종 파이프(최종 연산)


스트림을 생성하고 이를 대상으로 중간 연산 최종 연산 진행하면, 원하는 기준으로 데이터를 

터링하고 필터링  데이터의 가공된 결과를 얻을  있다. 그것도 매우 적은 양의 코드로 말이다.








스트림의  번째 예제와 이해


public static void main(String[] args) {

   int[] ar = {1, 2, 3, 4, 5};

   IntStream stm1 = Arrays.stream(ar);           // 배열 ar로부터 스트림 생성

   IntStream stm2 = stm1.filter(n -> n%2 == 1);           // 중간 연산 진행

   int sum = stm2.sum();                               // 최종 연산 진행

   System.out.println(sum);

}


최종 연산 생략하면 아무 결과도 얻지 못한다.


public static void main(String[] args) {

   int[] ar = {1, 2, 3, 4, 5};

   int sum = Arrays.stream(ar)          // 스트림 생성,

                   .filter(n -> n%2 == 1)          // filter 통과,

                   .sum();                      // sum 통과 결과 반환

   System.out.println(sum);

}


9








본서에서 스트림을 설명하는 방향


스트림 관련 전체 내용의 구분

 • 스트림의 생성 방법

 • 중간 연산의 종류와 내용

 • 최종 연산의 종류와 내용


이중 일부에 해당하는 다음 내용들만 이번 Chapter에서 설명 나머진 다음 Chapter에서 설명


스트림의 생성 방법

 배열  컬렉션 인스턴스 대상으로 스트림을 생성하는 방법

 

중간 연산의 종류와 내용

 필터링(Filtering)  맵핑(Mapping) 관련 연산

 

최종 연산의 종류와 내용

 리덕션(Reduction) 관련 연산








스트림 생성하기 : 배열


void forEach(Consumer<? super T> action)

  // Consumer<T>     void accept(T t)


배열 대상 스트림 생성 대표 메소드

public static <T> Stream<T> stream(T[] array)   // Arrays 클래스에 정의


public static void main(String[] args) {

   String[] names = {"YOON", "LEE", "PARK"};

   Stream<String> stm = Arrays.stream(names);   // 스트림 생성

   stm.forEach(s -> System.out.println(s));   // 최종 연산 진행

}


실제로는 이러한 스타일로 코딩


public static void main(String[] args) {

   String[] names = {"YOON", "LEE", "PARK"};

   Arrays.stream(names)

         .forEach(s -> System.out.println(s));

}


YOON

LEE

PARK








스트림 생성하기: 배열 대상 다양한 메소드들


public static IntStream stream(int[] array)

public static IntStream stream(int[] array, int startInclusive, int endExclusive)

public static DoubleStream stream(double[] array)

public static DoubleStream stream(double[] array, int startInclusive, int endExclusive)

public static LongStream stream(double[] array)

public static LongStream stream(double[] array, int startInclusive, int endExclusive)

   

Arrays 클래스에 정의된 메소드들


public static void main(String[] args) {

   double[] ds = {1.1, 2.2, 3.3, 4.4, 5.5};

 

   Arrays.stream(ds)

         .forEach(d -> System.out.print(d + "\t"));

   System.out.println();

 

   Arrays.stream(ds, 1, 4) // 인덱스 1부터 인덱스 4 이전까지

         .forEach(d -> System.out.print(d + "\t"));

   System.out.println();

}


1.1    2.2    3.3    4.4    5.5

2.2    3.3    4.4








스트림 생성하기: 컬렉션 인스턴스


컬렉션 인스턴스를 대상으로 스트림 생성  호출하는 메소드

 

default Stream<E> stream()

   // java.util.Collection<E> 디폴트 메소드

public static void main(String[] args) {

   List<String> list = Arrays.asList("Toy", "Robot", "Box");

   list.stream()

       .forEach(s -> System.out.print(s + "\t"));

   System.out.println();

}


Toy    Robot    Box



반응형