stream

김지원·2023년 9월 18일
0

stream

기존 꺼는 그대로 두고(원본은 불변) 새로 만듬(깊은 복사) = 변경 감지 가능

생성 stream

가공(분류, 필터, 정렬, 연산, 등...)
스트림이 계속 열려있으니까 가공을 여러번 가능함

수집


생성


	@Test
	public void ex01(){

		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(4);
		list.add(2);
		list.add(3);
		list.add(1);
		
		Stream<Integer> stream = list.stream();
		stream.forEach( t -> {
			System.out.println(t);
		} );

		System.out.println("=================");

		// 같은 코드인데 위에꺼로 쓰자
		Stream<Integer> stream2 = list.stream();
		stream2.forEach(new Consumer<Integer>() {
			@Override
			public void accept(Integer t){
				System.out.println(t);
			}
		});
		
		System.out.println("=================");
		
		// 문법임
		Stream<Integer> stream3 = list.stream();
		stream3.forEach(System.out::println);

	}

가공 (중계 연산)

필터, 맵은 ctrl+space 해서 람다식 넣으면 편하다

  1. 스트림 필터링 :
    filter() : 조건으로 걸러낼 때 사용
    distinct() : 중복 제거

  2. 스트림 변환 :
    map() : 가공할때 자주 사용
    flatMap() : 리스트의 각 인덱스에 또 리스트가 있으면 그런걸 다 벗겨서 넣어줌

  3. 스트림 제한 : limit(), skip()

  4. 스트림 정렬 : sorted()

  5. 스트림 연산 결과 확인 : peek() : 지연연산이라 여러 작업을 하면 하나씩 한번에 실행돼서 보기 힘듬...
    https://bugoverdose.github.io/development/stream-lazy-evaluation/#lazy-vs-eager

forEach : 스트림의 각 요소에 대해 특정 작업을 수행할 때 사용됩니다.
이 메서드는 스트림의 모든 요소에 대한 반복을 수행하면서 각 요소에 대한 작업을 지정하는데 람다식을 사용함


수집

.collect(Collectors.toList());
스트림을 컬렉션(List)로


	@Test
	public void ex03() {
		List<Integer> list = Arrays.asList(1, 2, 3, 4);
		List<Integer> newList = list.stream()
				.filter(t -> t != 3)
				.map(t -> {
					Integer r = t * 2;
					return r;
				})
				.collect(Collectors.toList());

		newList.stream().forEach(t -> System.out.println(t));
	}

스니펫 설정
https://getinthere.notion.site/5-VsCode-4cc5772c195b453dbd43a59ab93b7b34
출처
https://youtu.be/IUsiEIWXeLY?si=if8FL9oQKNERz3Es
선생님은 스니펫 씀

profile
https://github.com/k7850

0개의 댓글

관련 채용 정보