java

[java] 자바 스트림(Stream) 사용 및 예제

JH..Y 2021. 10. 29. 21:33
728x90

스트림(Stream) 이란 ?

Java8부터 지원하는 Stream은 컬렉션, 배열등에 대해 저장되어있는 요소들을 하나씩 참조하며 반복적인 처리를 가능하게하는 기능이다. 이러한 Stream을 이용한다면 불필요한 for문과 그 안에서 이루어지는 if문등의 분기처리를 쓰지않고도 깔끔하고 직관적인 코드로 변형할 수 있다.

 

Stream 특징

  1. Stream은 데이터를 변경하지 않는다.
    - Stream은 원본데이터로부터 데이터를 읽기만 할 뿐, 원본데이터 자체를 변경하지 않는다.
  2. Stream은 일회용이다.
    - Stream은 한 번 사용하면 닫혀서 재사용이 불가능하다. 필요하다면 정렬된 결과를 컬렉션이나 배열에 담아 반환할 수 있다.
  3. Stream은 작업을 내부 반복으로 처리한다.
    - Stream을 이용한 작업이 간결할 수 있는 비결중 하나가 바로 내부 반복이다. 내부 반복이라는 것은 반복문을 메서드의 내부에 숨길 수 있다는 것을 의미한다. (반복문이 코드 상에 노출되지 않다.)

 

Stream의 구조

Stream의 구조는 크게 세 가지로 볼 수 있다.

1. Stream 생성

2. 중개 연산

3. 최종 연산

세 가지로 구성되며 중개연산은 연산결과를 Stream형태로 반환하기 때문에 연속적으로 연결해서 사용할 수 있다.

정리하면 데이터소스객체집합.Stream생성().중개연산().최종연산()이다.

 

 

public class 스트림 {

	public static void main(String[] args) {
		
        String[] array = { "안녕하세요", "맑음", "cloud", "구름", "달빛", "눈" };
		Set<String> set = Arrays.asList(array) // array를 List로 변형하고
				.stream() // 1. stream 생성
				.filter(e -> e.startsWith("cl")) // 2. 중개 연산 - cl로 시작하는 단어
				.map(String::toUpperCase) // 2. 중개 연산 - 대문자로 변환
				.collect(Collectors.toSet()); // 3. 최종 연산 - 중개 연산을 통해 가공된 stream을 모아준다.
		set.forEach(e -> System.out.println(e));
		
		System.out.println("==============================================");
		
		String[] array2 = { "수성", "금성", "지구", "화성", "목성" };
		List<String> list = Arrays.asList(array2) // array를 List로 변형하고
				.stream() // 1. stream 생성
				.sorted() // 2. 중개 연산 - 정렬(오름차순)
//				.sorted(Comparator.reverseOrder()) // 2. 중개 연산 - 정렬(내림차순)
				.filter(e -> e.startsWith("금")) // 2. 중개 연산 - 금으로 시작하는 단어
				.map(e -> e = "혜성") // 2. 중개 연산 - 금으로 시작하는 단어를 혜성으로 변경
				.collect(Collectors.toList()); // 3. 최종 연산 - 중개 연산을 통해 가공된 stream을 모아준다.
		list.forEach(e -> System.out.println(e));
		
        /////////////////// 출력결과 ////////////////////
        // CLOUD
        // ==============================================
        // 혜성
	}

}
728x90