프로그래밍 언어/JAVA

JAVA - 스트림 가공하기

딤섬뮨 2022. 10. 6. 12:26
728x90

전체 요소중에서 내가 원하는 것만 뽑아낼 수 있습니다

 

filter은 스트림 내 요소들을 하나씩 평가해서 걸러내는 작업입니다.

Stream<String> stream = 
	names.stream()
    .filer(name -> name.contains("a"));

 

Map

 

map은 스트림 내 요소들을 하나씩 특정한 값으로 변환해줍니다.이떄 값을 변환하기 위해 람다를 인자로 받습니다.

스트림에 들어간 값이 input이 되어서 특정 로직을 거친 후 output이 되어 리턴되는 새로운 스트림에 담기게 됩니다. 이러한 작업을 매핑이라고 합니다.

 

간단한 예제입니다. 스트림 내 String의 toUpperCase메소드를 실행해서 대문자로 변환한 값들이 담긴 스트림을 리턴합니다.

Stream<Integer> stream = names.stream()
						.map(String::toUpperCase());

다음처럼 요소 내에 있는 객체 수량도 꺼내올 수 있습니다. 각 상품을 상품의 수량으로 맵핑

 

Stream<Integer> stream = productList.stream()
						.map(Product :: getAmount);

 

FlatMap

인자로 mapper,리턴 타입은 Stream 즉 새로운 스트림을 생성해서 리턴하는 람다를 넘겨야 합니다.

flatmap은 중첩 구조 ex) [[a],[b]] 를 제거하고 단일컬렉션[a,b]을 만들어줍니다.

 

List<String> flatList = 
    list.stream()
    .flatMap(Collctions::stream)
    .collect(Collectors.toList());

 

 

728x90