Christmas Pikachu Stream API
개발일지/자바

Stream API

ZI_CO 2022. 11. 8.

Stream API 

- stream과 다른 개념 (파일 I/O , 소켓 X -> 완전히 다른 개념)

- java 8 버전부터 추가된 유용한 클래스

- 자바에서는 많은 양의 데이터를 저장하기 위해서

배열이나 컬렉션 프레임 워크를 사용한다.

그러면 코드의 길이가 너무 길어지고,

가독성도 떨어지며 코드의 재사용이 거의 불가능하다.

- 반복자 (iterator) -> 스트림 API를 도입했다.

스트림 API를 이용하면 배열이나 컬렉션 등

모두 거의 같은 방법으로 다룰 수 있게 된다.

* 스트림 API의 동작 흐름

  1. 스트림이라는 클래스가 생성
  2. 스트림의 중간 연산
  3. 스트림의 최종 연산

-  한번 생성한 스트림은 재사용이 불가능하다.

(단 한번만 사용이 가능하다)

- 스트림은 원본 데이터를 변경하지 않는다.

- 스트림의 연산은 필터 & 맵 기반의 API를 사용하여

지연 (Lazy) 연산을 통해 성능을 최적화 한다.

public class MainTest1 {

	public static void main(String[] args) {
		
		int[] arr = {1,2,3,4,5,6,7,8,9,10};
		int sumValue = Arrays.stream(arr).sum(); // 배열 요소의 합
		long count = Arrays.stream(arr).count(); // 배열 요소가 몇 개가 있는지
		
		System.out.println(sumValue);
		System.out.println(count);
	}
}
중간연산
filter ()
map ()
조건에 맞는 요소를 추출하고 싶을 때 사용
해당하는 요소를 변경하고 싶을 때 사용
마지막 연산 (최종 연산)
forEach
public class MainTest2 {

	public static void main(String[] args) {
		
		List<Integer> list = new ArrayList();
		for (int i=1; i<8; i++) {
			list.add(i);
		}
		// 스트림 생성
		Stream<Integer> myStream = list.stream();		
		// 중간 연산이 filter나 map
		// 마지막 연산이 forEach
		myStream.filter(s -> (s >= 5)).forEach(n -> System.out.println(n));
		System.out.println(list);
	}
}
public class MainTest3 {

	public static void main(String[] args) {
		
		List<String> sList = new ArrayList<>();
		sList.add("Tomas");
		sList.add("Edward");
		sList.add("Jack");
		
		Stream<String> stream = sList.stream();
        * 어떤 요소가 있나 확인
		stream.forEach(s -> System.out.println(s + " "));
		System.out.println("------------------------------");
		
        * 정렬하는 기능 (오름차순) --> sorted
		sList.stream().sorted().forEach(s -> System.out.println(s+ " "));
		System.out.println("------------------------------");
        * 데이터를 변형 할 때 사용하는 map
          --> 길이로 변경!
		sList.stream().map(s -> s.length()).forEach(n -> System.out.println(n)); 
		System.out.println("------------------------------");
        * 이름의 길이가 5글자 이상인 경우
		sList.stream().filter(s -> s.length() >= 5).forEach(m -> System.out.println(m));
		
	}
}

public class MainTest4 {

	public static void main(String[] args) {
		
		int[] arr = {1,2,3,4,5,6,7,8,9,10};
		
		List<Integer> list = new ArrayList<>();
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);
		list.add(5);
		
		int sum2 =list.stream().mapToInt(n -> n.intValue()).sum();
		System.out.println(sum2);
	}
}

 

 

 

mapToInt : 스트림을 Int스트림으로 변경시켜줌!

 

 

댓글