DevBoi

[Java] mapMulti 사용 본문

Language/[Java]

[Java] mapMulti 사용

HiSmith 2023. 7. 7. 21:55
반응형

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