-
Java Stream map(), flatMap() 차이카테고리 없음 2020. 6. 12. 22:29
List<Integer> list1 = Arrays.asList(1,2,3); List<Integer> list2 = Arrays.asList(4,5,6); List<Integer> list3 = Arrays.asList(7,8,9); List<List<Integer>> listOfLists = Arrays.asList(list1, list2, list3); List<Integer> listOfAllIntegers = listOfLists.stream() .flatMap(x -> x.stream()) .collect(Collectors.toList()); System.out.println(listOfAllIntegers); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
자바에서 Stream인터페이스는> map () 및 flatMap()메소드와 둘 다 중간 스트림 조작이며 다른 스트림을 메소드 출력으로 리턴합니다. map ()과 flatMap () 의 주요 차이점 은 두 메소드의 리턴 유형입니다.
map() 는 내부 객체의 변환에만 사용이 되지만 flatMap() 은 변환과 Flatten(펼침)이 함께 사용됩니다. flatMap() = map() + Flattening
map ()과 flatMap ()의 차이점
이 map()메소드는 스트림의 각 입력 값에 대해 하나의 출력 값을 생성합니다. 따라서 n스트림에 요소가있는 경우 map()조작은 n출력 요소 스트림을 생성합니다.
List<String> listOfStrings = Arrays.asList("1", "2", "3", "4", "5"); List<Integer> listOfIntegers = listOfStrings.stream() .map(Integer::valueOf) .collect(Collectors.toList()); System.out.println(listOfIntegers); //[1, 2, 3, 4, 5]
flatMap()두 단계 프로세스, 즉 map () + Flattening 입니다. Collection<Collectio<T>>을 Collection<T>로 변환하는 데 도움이됩니다.
map () 대 flatMap ()의 사용법
map()객체 스트림이있을 때 연산 을 사용할 수 있으며 스트림의 각 요소에 대해 고유 한 값을 가져와야합니다. 가 일대일 입출력 요소 사이의 매핑. 예를 들어, 직원 스트림에서 모든 직원의 생년월일 을 찾는 프로그램을 작성할 수 있습니다 .
flatMap()의 경우, 각 입력 요소 / 스트림에 대해 일대 다 매핑이 생성되어 먼저 여러 값을 얻은 다음 모든 입력 스트림의 값을 단일 출력 스트림으로 병합합니다. 예를 들어, 텍스트 파일의 모든 줄에서 모든 지구 단어 를 찾기위한 프로그램을 작성할 수 있습니다 .