🌊 Stream

  • Java8에서 추가 됨
  • 이전에는 배열이나 컬렉션의 요소를 다룰때 반복문을 통해 요소를 하나씩 꺼내서 사용했음
  • stream은 데이터의 흐름→ 배열,컬렉션요소를 효율적으로 다룰 수 있음
  • 멀티 스레드를 사용한 병렬처리로 성능 향상 가능

🐟 Stream 생성하기

• 배열을 사용한 Stream 생성

  • public static <T>Stream<T> stream(T[] array, int startInclusive, int endExclusive)
    • array : 스트림을 생성할 배열
    • startInclusive(옵션): 스트림을 시작할 인덱스
    • endExclusive(옵션): 스트림을 마칠 인덱스(포함안됨)
String[] arr=new String[]{"one","two","three"};
Stream<String> stream=Arrays.stream(arr);

stream.forEach(System.out::println);

Stream<String> stream=Arrays.stream(arr,0,2);

stream.forEach(System.out::println);

• 컬렉션을 사용한 Stream 생성

  • default Stream<E> stream()
List<String> list=Arrays.asList("one","two","three");
Stream<String> stream=list.stream();
stream.forEach(System.out::println);

• Stream.builder()를 사용한 Stream생성

  • static <T> Stream.Builder<T> builder()
    • Stream 을 생성하기 위한 Stream.Builder를 반환
    • Stream.Builder<T>

      Stream.Builder 인터페이스의 함수

      함수 설명 반환값
      accept(T t) built 전 stream에 원소 추가 void
      add(T t) built 전 stream에 원소 추가 default Stream.Builder
      build() - 스트림을 빌드
      - builder의 상태를 built로 전환
      Stream
  • Stream.<T>builder().build() → 빈 스트림
Stream<String> stream=Stream.<String>builder()
				.add("one")
				.add("two")
				.add("three")
				.build();

stream.forEach(System.out::println);

• Stream.generate()를 사용한 Stream생성

  • Supplier 람다식으로 값 추가 가능
  • **generate(Supplier<T> s)
    • 무한하고 정렬되지 않은 일련의 Stream을 반환
    • s : 스트림의 요소를 생성할 방법을 제공하는 Supplier
  • limit(long maxSize)
    • maxSize까지 길이까지 자른 stream을 반환
Stream<String> stream=Stream.generate(()->"생성요소"))
					.limit(5);

stream.forEach(System.out::println);

• Stream.iterate()를 사용한 Stream생성

  • 초기 값과 람다식을 이용한 증가값을 지정하여 값 추가 가능
  • static <T>Stream<T> iterate(T seed,UnaryOperator<T> f)
    • 초기 seed에 f를 적용한 무한하고 정렬된 일련의 Stream반환
    • seed: 첫번째 원소
    • f : 다음원소를 생성할때 이전 원소에 적용되는 함수
Stream<Integer> stream=Stream.iterate(10,n->n*2)
					.limit(5);

stream.forEach(System.out::println);

🐟 데이터 타입별 스트림 유형

• 기본 데이터 타입 Stream

  • IntStream
  • LongStream
  • DoubleStream

  • 기본 데이터 타입 Strean 함수

    함수 설명 반환값
    range(int startInclusive, int endInclusive) startInclusive 부터endInclusive까지 1씩 증가하는 Stream반환 static xxxStream
    rangeClose(int startInclusive, int endExclusive) startInclusive 부터endInclusive-1까지 1씩 증가하는 Stream반환 static xxxStream
    boxed() 해당 요소를 레퍼 클래스로 변환한(객체화,boxing) 스트림을 반환
    ex) int→Integer()
    Stream<T>
      IntStream st1= IntStream.range(0,3);
      //0,1,2 (int)
        
      LongStream st2=LongStream.rangeclosed(0,3);
      //0,1,2,3 (long)
        
      IntStream st3=IntStream.range(0,3).boxed();
      //0, 1, 3 (Integer)
        
    
  • Random클래스를 통한 기본 데이터 타입 Stream만들기

      DoubleStream st4=new Random().doubles(2);
      //0.2312421... 0.1231412... (double)
    

• 문자열 타입

  • 문자열을 이용한 스트림 생성

      IntStream st1="HelloWorld".chars();
        
      Stream<String> st2=pattern.compile(",").splitAsStream("Aaa,Bbb,Ccc,Ddd");
      //Aaa , Bbb , Ccc , Ddd
    

• 파일

  • Files.lines() : 파일 각 라인의 문자열을 사용하여 Stream객체 생성

      Stream<String> st1=Files.lines(Paths.get("file_name.txt"),Charset.defaultCharset());
      //첫번째 줄 , 두번째 줄, 세번째 줄 , ...
    

댓글남기기