์ •๋ ฌํ•ด๋‘” `List`๋ฅผ ` Collectors.toMap()`์œผ๋กœ ์ค‘๋ณต ์ œ๊ฑฐ ํ›„ ๋‹ค์‹œ `List`๋กœ ๋งŒ๋“ค์—ˆ๋”๋‹ˆ ์ˆœ์„œ๊ฐ€ ์—‰ํ‚ค๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๊ตฌ๊ธ€๋ง ํ•œ ๊ฒฐ๋ก ์€ `Collectors.toMap()`์€ ๊ธฐ๋ณธ์ ์œผ๋กœ `HashMap`์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ๋ฅผ ์žƒ์–ด๋ฒ„๋ฆฐ๋‹ค.

`LinkedHashMap::new`๋กœ ์ˆ˜์ง‘ํ•˜๋ฉด ์ˆœ์„œ๊ฐ€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค.

 

๐Ÿ’ฅ ๊ธฐ์กด์— ์‚ฌ์šฉํ–ˆ๋˜ ์ฝ”๋“œ

List<User> userList = // ID ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •

List<User> result = userList.stream()
    .collect(Collectors.collectingAndThen(
        Collectors.toMap(User::uniqueKey, Function.identity(), (exist, repl) -> exist),
        map -> new ArrayList<>(map.values())
    ));

System.out.println(result.stream().map(User::getId).collect(Collectors.toList()));
  • ๊ธฐ๋Œ€: ์›๋ณธ `userList` ์ˆœ์„œ (1, 2, 3, ... , 10, 12, 13, ...)
  • ์‹ค์ œ: ID ์ˆœ์„œ๊ฐ€ ํ‹€์–ด์ง€๊ฑฐ๋‚˜, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋ˆ„๋ฝ/์ค‘๋ณต์ด ๋ฐœ์ƒ

 

๐Ÿค” ์ˆœ์„œ๊ฐ€ ๊นจ์ง€๋Š” ์ด์œ 

๊ตฌํ˜„์ฒด ํŠน์ง•
HashMap (๊ธฐ๋ณธ) ํ‚ค/๊ฐ’ ์กฐํšŒ O / ์‚ฝ์ž… ์ˆœ์„œ ๋ณด์žฅ X
LinkedHashMap ํ‚ค/๊ฐ’ ์กฐํšŒ O / ์‚ฝ์ž… ์ˆœ์„œ ๋ณด์žฅ O

`Collectors.toMap()` โžก `new HashMap<>()` ์‚ฌ์šฉ โžก `values()`๋ฅผ ๊บผ๋‚ผ ๋•Œ ๋‚ด๋ถ€ ๋ฐฐ์—ด ์ˆœ์„œ๋ฅผ ์ƒˆ๋กœ ์ •๋ ฌํ•ด์„œ ์‚ฝ์ž… ์ˆœ์„œ ์œ ์ง€ ์‹คํŒจ

โ€ป Java 8 ์ดํ›„์—๋„ ๊ธฐ๋ณธ Map์€ ์—ฌ์ „ํžˆ `HashMap`์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

โœจ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: `LinkedHashMap` ์ง€์ •

List<User> result = userList.stream()
    .collect(Collectors.collectingAndThen(
        Collectors.toMap(
            User::uniqueKey,                // key mapper
            Function.identity(),            // value mapper
            (exist, repl) -> exist,         // ์ค‘๋ณต key ์ •์ฑ… : ๊ธฐ์กด๊ฐ’ ์œ ์ง€
            LinkedHashMap::new              // โญ๏ธ ์ˆœ์„œ ์œ ์ง€ Map ์ƒ์„ฑ
        ),
        map -> new ArrayList<>(map.values())
    ));
  • ์‹คํ–‰ ๊ฒฐ๊ณผ: ์›๋ณธ `userList` ์ˆœ์„œ (1, 2, 3, ... , 10, 11, 12, ...)

+ Recent posts