JAVA/Stream
[Java] Stream > map
앵낄낄
2023. 6. 8. 19:31
반응형
git
https://github.com/ymwoo88/stream/tree/feature/map-%EC%98%88%EC%A0%9C
설명
Stream의 map API는 stream 흐름에 있는 데이터들을 가공한 결과물을 반환해주는 기능을 제공합니다.
map
주어진 함수를 이 스트림의 요소에 적용한 결과로 구성된 스트림을 반환합니다.
이것은 중간 작업입니다.
매개변수:
매퍼 – 각 요소에 적용할 비간섭, 상태 비저장 함수
보고:
새로운 스트림
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
예제
- 샘플 데이터 User
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
private Long id;
private String name;
private String email;
private Integer age;
private Boolean isWorking;
public static User getUserAmil() {
return User.builder()
.id(1L)
.name("amil")
.email("amil@ymwoo.com")
.age(28)
.isWorking(true)
.build();
}
public static User getUserBenny() {
return User.builder()
.id(2L)
.name("benny")
.email("benny@ymwoo.com")
.age(26)
.isWorking(true)
.build();
}
public static User getUserCho() {
return User.builder()
.id(3L)
.name("cho")
.email("cho@ymwoo.com")
.age(33)
.isWorking(false)
.build();
}
public static List<User> getExamUserList() {
return Arrays.asList(getUserAmil(), getUserCho(), getUserBenny());
}
- 샘플 데이터 SendMail
@Getter
@Builder(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@ToString
public class SendMail {
private String sender;
private String to;
public static SendMail valueOf(final String sender,
final String to) {
return SendMail.builder()
.sender(sender)
.to(to)
.build();
}
}
- 예졔1) User 객체에서 > 변수목록 뽑기
- map을 열고 return 이 명확한 단일형태의 로직은 {}을 생략할 수 있다.
- List 를 Stream흐름에서 getEmail() 추출하여 List형태로 추출한 테스트이다.
@Test
@DisplayName("email List<String> 목록으로 추출")
void case1() {
List<User> examUserList = User.getExamUserList();
List<String> emailList = examUserList
.stream()
.map(User::getEmail) // getter user.getEmail()
.toList();
// 결과 출력
emailList
.forEach(user -> log.info(">>> emailList Info = {}", user));
}
16:40:08.064 [Test worker] INFO com.ymwoo.stream.filter.StreamSortTest -- >>> sortedUser User Info = User(id=2, name=benny, email=benny@ymwoo.com, age=26, isWorking=true)
16:40:08.073 [Test worker] INFO com.ymwoo.stream.filter.StreamSortTest -- >>> sortedUser User Info = User(id=1, name=amil, email=amil@ymwoo.com, age=28, isWorking=true)
16:40:08.073 [Test worker] INFO com.ymwoo.stream.filter.StreamSortTest -- >>> sortedUser User Info = User(id=3, name=cho, email=cho@ymwoo.com, age=33, isWorking=false)
- 예제2) 다른 Object 타입으로 가공하여 반환 된 목록 뽑기
- map을 열고 {} 형태를 사용하면 안에서 추가 로직기입이 가능
- 반환 시 return 을 선언
- List 데이터 값이 List 형태로 가공되어 리턴 된 테스트이다.
@Test
@DisplayName("다른 모델형태로 List<SendMail> 목록으로 추출")
void case2() {
List<User> examUserList = User.getExamUserList();
List<SendMail> sendEmailList = examUserList.stream()
.map(user -> {
log.info("email to address info : {}", user.getEmail());
return SendMail.valueOf("sender@ymwoo.com", user.getEmail());
})
.toList();
// 결과 출력
sendEmailList
.forEach(user -> log.info(">>> sendEmailList Info = {}", user));
}
19:26:15.339 [Test worker] INFO com.ymwoo.stream.map.StreamMapTest -- >>> sendEmailList Info = SendMail(sender=sender@ymwoo.com, to=amil@ymwoo.com)
19:26:15.342 [Test worker] INFO com.ymwoo.stream.map.StreamMapTest -- >>> sendEmailList Info = SendMail(sender=sender@ymwoo.com, to=cho@ymwoo.com)
19:26:15.342 [Test worker] INFO com.ymwoo.stream.map.StreamMapTest -- >>> sendEmailList Info = SendMail(sender=sender@ymwoo.com, to=benny@ymwoo.com)
참조
반응형