본문 바로가기
Programming/JAVA(eclipse)

java 14 일차 _ 02. 스트림

by yoon9i 2024. 3. 27.

2. Stream API

 1) 용도:
    가. 이전 사용 형태
       컬렉션,배열,파일에서 읽어서 출력 및 간단한 작업(컬렉션에 값추가,삭제,수정)
       만약에 정렬기능, 필터기능, 가공기능이 필요하면 따로 구현해야 됨.

    나. Stream API 사용 형태
        컬렉션,배열,파일에서 Stream 타입을 얻으면,
        Stream 정렬기능, 필터기능, 가공기능,.... 내장이 되어있음.

     * 사용
      a. 컬렉션/배열/파일
      b. Stream 타입을 얻음.
      c. 중간처리
         - 정렬
 - 가공
 - 중복체거
 - skip
 ..
      d. 최종처리
         - 총합,평균,최대값,최소값, 갯수
 - 컬렉션타입변경(List로 변경, Map변경,..)
 - 반복출력

 

2. 스트림 얻는 방법

  가. 컬렉션
     List<String> list = Arrays.asList("홍길동","이순신","유관순");
     Stream<String> s = list.stream();


  나. 배열
     String [] names = {"홍길동1","이순신1","유관순1"};
     Stream<String> s2 = Arrays.stream(names);
     Stream<String> s3 = Stream.of(names);
     Stream<String> s4 = Stream.of("홍길동2","이순신2","유관순2");

 

package exam24_스트림;

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Stream;

public class StreamTest01_컬렉션및배열에서얻기 {

	public static void main(String[] args) {
		
		// 1. 컬렉션
		List<String> list = Arrays.asList("홍길동","이순신","유관순");
		Stream<String> s = list.stream();
		// 반복출력 forEach(Consumer<? super T> action)
		// Consumer 익명클래스
		Consumer<String> c = new Consumer<String>() {
			@Override
			public void accept(String t) {
				System.out.println(t);
			}
		};
//		s.forEach(c);
		
		// Consumer 람다
		Consumer<String> c2 = t -> System.out.println(t);
		
		// 메서드 호출(method reference)
		Consumer<String> c3 = System.out::println;
//		s.forEach(c3);
//		s.forEach(c3); // 에러발생? 이전 forEach 에서 스트림 모두 소멸됨.
//		s.forEach(System.out::println);
		list.stream().forEach(System.out::println); // 일반적임.
		System.out.println();
		
		// 2. 배열
		String[] names = {"홍길동","이순신","유관순"};
		
		// 가. Arrays.stream(배열)
		Stream<String> s2 = Arrays.stream(names);
		s2.forEach(System.out::println);
		System.out.println(); 
		
		// 나. Stream.of(T)
		Stream<String> s3 = Stream.of(names);
		s3.forEach(System.out::println);
		System.out.println(); 
		
		// 다. Stream.of(T...)
		Stream<String> s4 = Stream.of("홍길동","이순신","유관순");
		s4.forEach(System.out::println);
		System.out.println(); 
		
		// 정수형
		Stream<Integer> s5 = Stream.of(10,20,30);
		s5.forEach(System.out::println);
		System.out.println();
		
	}// end main

}