ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Stream
    Java 2023. 4. 6. 12:40
    자바에서 제공하는 다양한 기능들

    주의!

    여기서는 java.io 패키지에 있는 stream 이 아닙니다.
    java.util.stream 을 이야기 해봅시다.

    java 8에서 추가된 java.util.stream 패키지는 자바 8의 기능 중 하나로, 컬렉션(Collection)과 배열(Array)에서
    데이터를 처리하는 기능을 제공합니다. 이를 스트림(Stream)이라고 합니다.


     

    스트림 이란?

     

    자료의 대상과 관계없이 동일한 연산을 수행

     

    배열, 컬렉션을 대상으로 연산을 수행 함 일관성 있는 연산으로 자료의 처리를 쉽고 간단하게 함 자료 처리에 대한 추상화가 구현되었다고 함

     

    한번 생성하고 사용한 스트림은 재사용 할 수 없음

     

    자료에 대한 스트림을 생성하여 연산을 수행하면 스트림은 소모됨

    다른 연산을 수행하기 위해서는 스트림을 다시 생성해야 함

    스트림 연산은 기존 자료를 변경하지 않음

     

    스트림 연산은 기존 자료를 변경하지 않음

     

    자료에 대한 스트림을 생성하면 스트림이 사용하는 메모리 공간은 별도로 생성되므로 연산이 수행되도 기존 자료에 대한 변경은 발생하지 않음

     

    스트림 연산은 중간 연산과 최종 연산으로 구분 됨

    스트림에 대해 중간 연산은 여러 개의 연산이 적용될 수 있지만 최종 연산은 마지막에 한 번만 적용됨.

    최종연산이 호출되어야 중간 연산에 대한 수행이 이루어지고 그결과가 만들어짐.

    따라서 중간 연산에 대한 결과를 연산 중에 알 수 없음.

    이를 '지연 연산'이라고 함

     

    package ch01;
    
    import java.util.Arrays;
    
    public class IntArrayTest {
    
    	//코드의 시작점
    	public static void main(String[] args) {
    		//1. 배열과 + Stream
    		int[] arr = {1,2,3,4,5};	//배열 선언과 초기화
    		
    		// 원래는 for문 사용과 변수를 활용해서 연산 처리 했었다.
    		 int sumVal = Arrays.stream(arr).sum();
    		 System.out.println("sumVal : " + sumVal);
    		 long count = Arrays.stream(arr).count();
    		 System.out.println("count : " + count);
    	}	//end of main
    
    }	//end of class
    package ch01;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Stream;
    
    public class ArrayListMainTest {
    
    	public static void main(String[] args) {
    	
    	// 자료구조라면 스트림을 생성할 수 있다.
    	// 스트림은 최종연산만 할 수도 있고
    	// 스트림은 중간연산 + 최종연산을 할 수도 있다.
    	// 최종 연산 : sum(), coun(), forEarh():
    		
    	// 중간연산이란? map,filter,sorted 는 중간 연산이다.
    	
    	List<String> sList = new ArrayList<>();
    	sList.add("Tomas");
    	sList.add("Edward");
    	sList.add("Jack");
    	
    	// 자료 -> 스트림생성
    	Stream<String> stream = sList.stream();
    	
    	// 최종 연산 forEach
    	// 최종 연산과 중간 연산에 구현은 람다식을 활용한다.
    	// 코드에 양을 줄일 수 있고 가독성 높일 수 있다.
    	stream.forEach( s -> {System.out.print(s + " ");});
    	System.out.println();
    	System.out.println("-------------------");
    	//중간 연산 + 최종연산 - 중간연산은 최종 연산이 호출 되어야 진행 된다.
    	sList.stream().sorted().forEach(s ->{System.out.print(s +" ");});
    	System.out.println();
    	System.out.println("-------------------");
    	//중간 연산 + 최종연산
    	//map 괄호안에 람다식으로 표현
    	//자료구조(Tomas Edward Jack) -> map
    	//길이값으로 받아 최종연산 반복돌린다.
    	sList.stream().map(s -> s.length())
    		.forEach(s ->System.out.print("글자 개수확인 : " + s+ "\n"));
    	
    	//중간 연산(filter) + 최종 연산(forEach)
    	sList.stream().filter(s -> s.length() >= 5).forEach(s -> System.out.println(s));
    	
    	
    	
    	
    	
    	
    	}
    
    }

    'Java' 카테고리의 다른 글

    자바 리플렉션  (0) 2023.06.29
    버퍼 스트림  (0) 2023.03.14
    자바의 I/O 스트림  (0) 2023.03.02
    자료구조 연습문제  (0) 2023.02.21
    자료구조  (0) 2023.02.21
Designed by Tistory.