[Java8] Set을 Map으로 변환 (Set to Map)

 

✍️ Set to Map

보통 Set을 Map으로 바꾸는 작업은 Primitive 타입보단 Class 타입에 많이 사용하는 듯하다.

@Getter
@AllArgsConstructor
@ToString
public class Member {

    private int id;
    private String name;
}

 

1. Java 8 Stream API

Member Id가 Key, Member name이 Value가 되도록 매핑할 수 있다.

Set<Member> memberSet = new HashSet<>();
memberSet.add(new Member(1, "갱플랭크"));
memberSet.add(new Member(2, "카밀"));
memberSet.add(new Member(3, "클레드"));

Map<Integer, String> idToNames = memberSet.stream()
        .collect(Collectors.toMap(Member::getId, Member::getName));

System.out.println(idToNames);
// {1=갱플랭크, 2=카밀, 3=클레드}

 

혹은 Member Id가 Key, Member 그 자체가 Value가 되도록 매핑할 수도 있다.

Set<Member> memberSet = new HashSet<>();
memberSet.add(new Member(1, "갱플랭크"));
memberSet.add(new Member(2, "카밀"));
memberSet.add(new Member(3, "클레드"));

// Function.identity() == m -> m
Map<Integer, Member> idToMembers = memberSet.stream()
        .collect(Collectors.toMap(Member::getId, Function.identity()));

System.out.println(idToMembers);
// {1=Member(id=1, name=갱플랭크), 2=Member(id=2, name=카밀), 3=Member(id=3, name=클레드)}

 

2. Simple Loop

Set<Member> memberSet = new HashSet<>();
memberSet.add(new Member(1, "갱플랭크"));
memberSet.add(new Member(2, "카밀"));
memberSet.add(new Member(3, "클레드"));

Map<Integer, String> idToNames = new HashMap<>();
for(Member member : memberSet){
    idToNames.put(member.getId(), member.getName());
}

System.out.println(idToNames);
// {1=갱플랭크, 2=카밀, 3=클레드}

 

🌱  관련

[Java8] List를 Map으로 변환 (List to Map)

[Java8] List를 Set으로 변환 (List to Set)

[Java8] Set을 List로 변환 (Set to List)

[Java8] Set을 Map으로 변환 (Set to Map)

[Java8] Map을 List로 변환 (Map to List)

[Java8] Map을 Set으로 변환 (Map to Set)