반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- nestjs스터디
- 프로그래머스
- JPA 공부
- Kafka
- 스프링 공부
- Axon framework
- 기술공부
- Flutter
- 코테공부
- 자료구조공부
- 스프링부트
- nestjs공부
- 자바공부
- 스프링공부
- 카프카
- 코테준비
- DDD
- JPA공부
- JPA스터디
- nestjs
- querydsl
- 기술면접공부
- JPA
- JPA예제
- K8S
- 스프링
- 스프링부트공부
- 플러터 개발
- 알고리즘공부
- 플러터 공부
Archives
- Today
- Total
DevBoi
[Java] mapMulti 사용 본문
반응형
Java stream을 쓰다보면, Map을 많이 쓴다.
가령 이런.. 상황에서 말이다.
dtos.stream().map(x -> x.getAddress()).collect(Collectors.toList());
근데 어떤 상황에서 해당 방식으로 구현이 되어있었다.
List<MemberDto> dtos = List.of(new MemberDto("name1","id1","add1"),new MemberDto("name2","id2","ad2"),new MemberDto());
List<String> result = new ArrayList<>();
for(MemberDto memberDto : dtos){
result.add(memberDto.getId());
result.add(memberDto.getName());
}
레거시 코드에서는 이렇게 사용을 했다.
즉 사용자 객체 DTO에서 일부의 속성값만 String 리스트로 추출해서 새로 만들고 싶었던 것이다.
Map은 한개의 값만 사용가능하니, 이렇게 한것같았다.
그래서 좀 찾아보니 자바16버전부터 사용가능한, mapMulti에 대한 코드로 변경했다.
List<String> result = dtos.stream().<String>mapMulti((s, c) -> {
c.accept(s.getId());
c.accept(s.getName());
}).filter(Objects::nonNull).distinct().collect(Collectors.toList());
널일때 제외시켜주지 않으면 널일때 값이 담기게 된다는 치명적인 단점이 존재하지만
해당 필터로 단점을 극복할 수 있다.
해당 같이 간편하게 쓸수있다.
반응형
'Language > [Java]' 카테고리의 다른 글
[Java] Record 패턴 (0) | 2024.04.28 |
---|---|
[Java] Generic ! (0) | 2023.07.15 |
[Java] static block 및 instance block (0) | 2023.06.26 |
[Java] 제네릭을 조금 잘 써보면 어떨까 (0) | 2023.06.18 |
[Java] Mapstruct Spring 적용하기 (0) | 2023.06.14 |