๐ฒ ์๋ฐ Boolean๊ฐ์ด true์ธ value์ key ๋ฐํ๋ฐ๊ธฐ
์ฝ๋๋ฅผ ์ง๋ค๋ณด๋ฉด boolean๊ฐ์ ์ฌ๋ฌ ๊ฐ ๊ฐ์ง ๊ฐ์ฒด์์ true๊ฐ์ ๊ฐ์ง ๋ณ์๋ง ์ถ์ถํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๋ค.
๋๋ ์ด๋ฒ์ ์ฐธ๊ฐํ ์์ธ์ IoT ํด์ปคํค์์ ์์ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํ์๋ค.
ํ์ง๋ง ์ด๋ฅผ ํจ์จ์ ์ธ ์ฝ๋๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ชฐ๋๊ธฐ์
if๋ฌธ์ boolean๋ณ์์ ์๋งํผ ์ฌ์ฉํ์ฌ true์ธ ๋ฐ์ดํฐ์ ๋ณ์๋ช ์ List<String>์ ์ ์ฅํ๋๋ก ๊ตฌํํ๋ค.
๋ฌธ์ ์ DTO
@Getter
@Setter
public class AmenityRequestDto {
private boolean elevator; // ์๋ฆฌ๋ฒ ์ดํฐ
private boolean wideExit; //๋์ ์ถ์
๊ตฌ
private boolean ramp; // ๊ฒฝ์ฌ๋ก
private boolean accessRoads; // ์ ๊ทผ๋ก
private boolean wheelchairLift; // ํ ์ฒด์ด ๋ฆฌํํธ
private boolean brailleBlock; // ์ ์ ๋ธ๋ก
private boolean exGuidance; // ์๊ฐ์ฅ์ ์ธ ์ ๋ ์๋ด
private boolean exTicketOffice; // ์ฅ์ ์ธ ์ ์ฉ ๋งคํ์
private boolean wideRestroom; // ์ฅ์ ์ธ ์ ์ฉ ํ์ฅ์ค
private Double longitude;
private Double latitude;
public Map<String, Boolean> toMap(){
ObjectMapper objectMapper = new ObjectMapper();
HashMap result = objectMapper.convertValue(this, HashMap.class);
result.remove("longitude");
result.remove("latitude");
return result;
}
}
Before Refactoring
private List<String> getExistAmenityList(AmenityRequestDto data) {
List<String> trueList = new ArrayList<>();
if (data.isElevator()) trueList.add("a.elevator");
if (data.isWideExit()) trueList.add("a.wideExit");
if (data.isRamp()) trueList.add("a.ramp");
if (data.isAccessRoads()) trueList.add("a.accessRoads");
if (data.isWheelchairLift()) trueList.add("a.wheelchairLift");
if (data.isBrailleBlock()) trueList.add("a.brailleBlock");
if (data.isExGuidance()) trueList.add("a.exGuidance");
if (data.isExTicketOffice()) trueList.add("a.exTicketOffice");
return trueList;
}
์๋ฌด๋ฆฌ ๋ด๋ ํ๋์ฝ๋ฉ์ด ์๋๊ฐ?๋ผ๋ ์๊ฐ์ ๋ฆฌํฉํฐ๋ง์ ๊ฒฐ์ฌํ๋ค.
์ด๋ป๊ฒ ์ฝ๋๋ฅผ ์ง์ผํ ์ง ๊ณ ๋ฏผ ์ค ์ง์ธ์ ๋์์ผ๋ก Map์ ํตํด true์ธ ๊ฐ๋ค๋ง List๋ก ์ ์ฅํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
After Refactoring
private List<String> getExistAmenityList(AmenityRequestDto data) {
List<String> collect = data.toMap()
.entrySet() // Set<Map<K,V>.Entry<String,Boolean>> ๋ฆฌํด
.stream() // Stream<Map<K,V>.Entry<String,Boolean>> ๋ฆฌํด
.filter(Map.Entry::getValue) // m -> m.getValue().equals(true) ์ ๊ฐ์
.map(Map.Entry::getKey)
.collect(Collectors.toList());
collect.forEach(c -> System.out.println("c = " + c));
return collect;
}
๊ทธ๋ ๊ฒ ํด์ ๊ตฌํํ ๊ฒ์ด ์์ ์ฝ๋์ด๋ค.
ํจ์ฌ ๊น๋ํด ๋ณด์ด์ง ์์๊ฐ?
๐จ๐ป ์ฝ๋ ์ค๋ช
1. toMap()
Dto๊ฐ์ฒด์ toMap() ๋ฉ์๋๋ฅผ ๊ตฌํํ์ฌ Map์ผ๋ก ๋ฐํ๋ฐ๋๋ค.
2.entrySet()
Map์ entrySet() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Set๊ฐ์ฒด๋ก ๋ฌถ์ธ Map<Key, Value>๋ฅผ ๊ฐ์ ธ์จ๋ค.
map์๋ keySet๊ณผ entrySet์ด ์๋๋ฐ
keySet์ key๋ง ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๊ณ , entrySet์ key์ value๊ฐ ๋ชจ๋ ํ์ํ ๋ ์ฌ์ฉํ๋ค.
Set๊ฐ์ฒด๋ก ๊ฐ์ ๋ฆฌํดํด์ค๋ค.
3. Set๊ฐ์ฒด๋ฅผ stream() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Stream๊ฐ์ฒด๋ก ๋ณํํ๋ค.
.
4. filter(Map.Entry::getValue)
filter๋ฅผ ์ฌ์ฉํ์ฌ value๊ฐ True์ธ ๋ฐ์ดํฐ๋ง ํํฐ๋ง
[ Stream์์ ์ฌ์ฉํ๋ ::๋ ์ผ์ชฝ ๊ฐ์ฒด(Map.Entry)์์ ์ค๋ฅธ์ชฝ ๋ฉ์๋(getValue)๋ฅผ ์ฌ์ฉํ๋ค๋ ๋ป์ด๋ค. ]
filter() ๋ฉ์๋๋ ํ๋ผ๋ฏธํฐ๊ฐ true์ธ ๋ฐ์ดํฐ๋ง ํํฐ๋งํ์ฌ ๋ฆฌํดํด์ค๋ค.
๊ทธ๋์ m -> m.getValue().equals(true)๋ก ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋๊ฐ๋ค.
5. map(Map.Entry::getKey)
Value๊ฐ์ด True์ธ ๋ฐ์ดํฐ๋ง์ผ๋ก ํํฐ๋ง๋ Map์ Key๋ฅผ Stream์ผ๋ก ๋ฌถ์ ๊ฐ์ฒด๋ก ๋ฐํ
6. collect(Collectors.toList())
๋ฐํ๋ฐ์ Stream์ Collectors ํด๋์ค์ toList() ๋ฉ์๋๋ฅผ ํตํด Listํํ๋ก ๋ฐํ
๐งน ์ ๋ฆฌ
.filter(Map.Entry::getValue) -> Map์์ getValue๊ฐ true์ธ ๋ฐ์ดํฐ๋ง ํํฐ๋ง
.map(Map.Entry::getKey) -> value๊ฐ true์ธ ๋ฐ์ดํฐ์ key๋ค์ ๋ฆฌํด
collect(Collectors.toList()) -> ๋ฆฌํด ๋ฐ์ key๋ค์ Collectors ํด๋์ค๋ฅผ ์ฌ์ฉํด Listํํ๋ก ๋ณํ
์์ผ๋ก๋ ๊ณ์ ์ข์ ์ฝ๋๋ฅผ ์ํด ๊ณ ๋ฏผํ๊ณ ,
์ด๋ฏธ ๋๋ ํ๋ก์ ํธ๋๋ผ๋ ์ด๊ฒ์ ๊ฒ ์คํํด๋ณด๋ ๋์ ์ ์ ์ ๋ถํ์ฐ์.
'Language > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] @NotBlank, @NotNull, @NotEmpty ์ฐจ์ด (1) | 2023.06.12 |
---|---|
[Java] - Comparable ์ธํฐํ์ด์ค๋? (1) | 2023.01.21 |
[JAVA] ObjectMapper๋ฅผ ํตํ ์์ฌ์ด ๊ฐ์ฒด ํ์ ๋ณํ (2) | 2022.09.17 |
[Java] ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฒ - Array, List, Map (3) | 2022.08.15 |
[Java] [๊ฐ์ฒด์งํฅ] SOLID ์์น - ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น (9) | 2022.01.30 |