자바 8 Stream Api 의 맵 과 flatMap 조작 방법
1.머리말
자바 8 은 매우 유용 한 Stream API 를 제공 하여 집합 을 편리 하 게 조작 할 수 있다.오늘 우 리 는 두 개의Stream중간 조작
map(Function<? super T, ? extends R> mapper)
과flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)
을 토론 한다.2.map 조작
map
작업 은 흐름 속 의 요 소 를 다시 가공 하여 새로운 흐름 을 형성 하 는 것 이다.이것 은 개발 에 매우 유용 하 다.예 를 들 어 우 리 는 한 학생 이 집합 하 는데 우 리 는 그 중에서 학생 의 나 이 를 추출 하여 학생 의 연령 분포 곡선 을 분석 해 야 한다.자바 8 에 놓 기 전에 우 리 는 새로운 집합 을 통 해 학생 들 의 집합 을 통 해 요소 중의 연령 속성 을 소비 해 야 한다.현재 우 리 는 매우 간단 한 흐름 식 조작 을 통 해 이 수 요 를 완성 했다.
설명도:
대응 하 는 의사 코드:
//
List<Integer> ages=studentList.stream().map(Student::getAge).collect(Collectors.toList());
3.flatMap 조작위의 예 를 통 해
map
조작 은 매우 이해 하기 쉬 울 것 이다.그럼flatMap
뭐 하 는 거 예요?이렇게 해서 우 리 는 위의 예 를 바 꾸 어 반 단위 라면 모든 반 아래 의 모든 학생 들 의 나 이 를 추출 하여 학생 들 의 연령 분포 곡선 을 분석 할 것 이다.이때 우 리 는 위의 방법 을 사용 해도 괜 찮 습 니까?
List<List<Student>> studentGroup= gradeList.stream().map(Grade::getStudents).collect(Collectors.toList());
위의 한 차례 의 조작 을 통 해 우 리 는 각 반 의 학생 집합List<List<Student>>
만 얻 을 수 있다.우 리 는 또 순환 을 끼 워 넣 어야 학생 들 의 연령 데 이 터 를 얻 을 수 있어 서 매우 불편 하 다.우리 가 모든 학생 들 의 집합List<Students>
으로 돌아 갈 수 있다 면 훨씬 편리 할 것 이다.맞습니다!flatMap
해결 할 수 있어!
// flatMap List<Students> map
List<Integer> ages = grades.stream().flatMap(grade -> grade.getStudents().stream()).map(Student::getAge).collect(Collectors.toList());
위의 위조 코드 에서 보 듯 이 우 리 는flatMap
를 사용 하여 모든 학생 을 한데 모 았 다.그리고 추출 연령map
을 사용 합 니 다.flatMap
와 달리map
는map
추출 속성 만 흐름 에 넣 고,flatMap 은 먼저 속성 을 추출 하여 비교적 작은 흐름 에 넣 은 다음 에 모든 흐름 을 하나의 흐름 으로 합 친다.모래 가 모여 탑 이 되 는 느낌 이 든다.그림 을 한 장 더 그 려 서 이 해 를 깊이 하 다.
4.총화
map
조작 과flatMap
조작 이 익숙 해 지면 데이터 흐름 의 조작 문 제 를 간편 하 게 해결 할 수 있다.지식 을 넓 혀 보 세 요.사실은 자바 8 에 Stream 뿐만 아니 라 이 두 가지 조작 이 존재 합 니 다.사실은Optional<T>
에 도 이 두 가지 조작 이 존재 하 는데 역할 이 많 지 않 습 니 다.위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 자바 8 Stream Api 의 맵 과 flatMap 조작 방법 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Liquibase】DB 작성·테이블 정의 변경신규 스타터 프로젝트 작성 Liquibase와 MySQL 선택 application.properties에 DB 정보 넣기 MySQL에서 "testdatabase"라는 데이터베이스 만들기 빌드 종속성 추가 build....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.