[JAVA] Stream 사용하기(스트림)- 1.기본

Posted by 김성철

JAVA - Stream 사용하기 - 기본

https://mangkyu.tistory.com/112  
https://mangkyu.tistory.com/search/stream?page=5  

Stream

JDK8 부터 지원되는 기능이며 함수형으로 프로그래밍이 가능하도록 해줌  
Stream 은 데이터를 추상화하고 처리하는데 자주사용되는 함수들을 정의해놓았음  
  
- 원본 데이터를 변경하지 않음  
	스트림으로 생성한 데이터는 원본데이터가 아닌 원본데이터를 조회하여 별도의 요소들로 스트림을 생성함  
	원본데이터를 읽기만 하며, 수정,정렬 등의 작업은 하지않음  
  
- 일회용임  
	한번 사용이 끝나면 다시 사용할수 없으며, 다시 사용하고 싶으면 스트림을 다시 생성해줘야함  
	닫힌 스트림을 사용하면 IllegalStateException 발생함  
  
- 내부 반복으로 작업을 처리함  
	반복문의경우 아래와 같이 처리를 했었지만, 내부메소드로 forEach등을 가지고 있어서 코드가 간결해짐  
		for(String a : aaaaList){  
			System.out.println(a)  
		}  
  
=================================================================================================================  
public static void main(String[] args) {  
  
		//wordProcessTest();  
  
		String[] nameArray = {"kimsungchul", "yanghyeuny", "egiljung","1"};  
		List<String> nameList = Arrays.asList(nameArray);  
  
		// 별도의 스트림을 생성하여서 정렬  
		Stream<String> nameStream = nameList.stream();  
		Stream<String> arrayStream = Arrays.stream(nameArray);  
  
		//스트림 사용  
		// 복사한 데이터를 출력  
		System.out.println("=============================");  
		nameStream.sorted().forEach(System.out::println);  
		System.out.println("=============================");  
		arrayStream.sorted().forEach(System.out::println);  
		// 스트림은 한번 사용하고 닫히므로 한번 더 호출할 경우 오류 발생  
		//arrayStream.sorted().forEach(System.out::println);  
  
		System.out.println("=============================");  
		//스트림 미사용 (기존방식 ,for , 향상된 for)  
		//배열 정렬  
		Arrays.sort(nameArray);  
		//이름 리스트 정렬  
		Collections.sort(nameList);  
		//아래 두개의 방식으로 출력  
		for(String s : nameArray){  
			System.out.println(s);  
		}  
		System.out.println("=============================");  
		for(int i=0;i<nameList.size();i++){  
			System.out.println(nameList.get(i));  
		}  
  
		System.out.println("=============================");  
		List<String> strList = Arrays.asList("A3" , "B2" , "A1" , "B3" , "A2" , "B1", "C3" , "C2" , "D1");  
		strList  
				.stream()                               //스트림 생성  
				.filter(s ->s.startsWith("C"))          //C 로시작하는애들만 필터  
				.map(String::toLowerCase)               //필터된 문자에 대해서 소문자로 변환  
				.sorted()                               //정렬  
				.forEach(System.out::println);          //출력  
		System.out.println("=============================");  
		for(String a : strList){  
			System.out.println("## a : " + a);  
		}  
		Stream<String> strStream = strList.stream();  
		strStream.forEach(System.out::println);  
  
	}  
  
=================================================================================================================