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());
널일때 제외시켜주지 않으면 널일때 값이 담기게 된다는 치명적인 단점이 존재하지만
해당 필터로 단점을 극복할 수 있다.
해당 같이 간편하게 쓸수있다.
반응형