728x90
반응형
source 는 Github 에 있습니다.
목차는 Java series 에 있습니다.
[Java 12편] Map Sort 정리
Java Map Sort 정리
- Java Map Sort 관련 예제를 작성했습니다.
Source
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MapSortTest { | |
@Test | |
@DisplayName("String type value 로 map sort") | |
void testMapSortStringValueTest() { | |
final Map<Integer, String> map = Map.of( | |
10, "abc", | |
5, "def", | |
2, "adef" | |
); | |
final Map<Integer, String> sortedMap = | |
map.entrySet() | |
.stream() | |
.sorted(Map.Entry.comparingByValue()) | |
.collect(Collectors.toMap( | |
Map.Entry::getKey, | |
Map.Entry::getValue, | |
(oldValue, newValue) -> oldValue, | |
LinkedHashMap::new) | |
); | |
Assertions.assertEquals(Map.of(10, "abc", 2, "adef", 5, "def"), sortedMap); | |
} | |
@Test | |
@DisplayName("String type value 로 map reverse sort") | |
void testMapReverseSortStringValueTest() { | |
final Map<Integer, String> map = Map.of( | |
10, "abc", | |
5, "def", | |
2, "adef" | |
); | |
final Map<Integer, String> sortedMap = | |
map.entrySet() | |
.stream() | |
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) | |
.collect(Collectors.toMap( | |
Map.Entry::getKey, | |
Map.Entry::getValue, | |
(oldValue, newValue) -> oldValue, | |
LinkedHashMap::new) | |
); | |
Assertions.assertEquals( | |
Map.of( | |
5, "def", | |
2, "adef", | |
10, "abc" | |
), | |
sortedMap | |
); | |
} | |
@Test | |
@DisplayName("Object value 로 Map sort") | |
void testMapSortObjectValueTest() { | |
final Map<Integer, Value> map = | |
Map.of(3, Value.builder() | |
.id("123") | |
.name("test3") | |
.build(), | |
2, Value.builder() | |
.id("234") | |
.name("test2") | |
.build(), | |
1, Value.builder() | |
.id("345") | |
.name("test1") | |
.build() | |
); | |
final Map<Integer, Value> sortedMap = | |
map.entrySet() | |
.stream() | |
.sorted(Entry.comparingByValue(Comparator.comparing(Value::getName))) | |
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, | |
(oldValue, newValue) -> oldValue, LinkedHashMap::new)); | |
Assertions.assertEquals( | |
Map.of( | |
1, Value.builder() | |
.id("345") | |
.name("test1") | |
.build(), | |
2, Value.builder() | |
.id("234") | |
.name("test2") | |
.build(), | |
3, Value.builder() | |
.id("123") | |
.name("test3") | |
.build() | |
), | |
sortedMap | |
); | |
} | |
@Test | |
@DisplayName("Object value CustomComparator Map sort") | |
void testMapSortObjectValueCustomComparatorTest() { | |
final Map<Integer, Value> map = | |
Map.of(3, Value.builder() | |
.id("123") | |
.name("test3") | |
.build(), | |
2, Value.builder() | |
.id("234") | |
.name("test2") | |
.build(), | |
1, Value.builder() | |
.id("345") | |
.name("test1") | |
.build() | |
); | |
final Map<Integer, Value> sortedMap = | |
map.entrySet() | |
.stream() | |
.sorted(Comparator.comparing(e -> CustomComparator.getValueOrder(e.getValue().name))) | |
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, | |
(oldValue, newValue) -> oldValue, LinkedHashMap::new)); | |
Assertions.assertEquals( | |
Map.of( | |
1, Value.builder() | |
.id("345") | |
.name("test1") | |
.build(), | |
2, Value.builder() | |
.id("234") | |
.name("test2") | |
.build(), | |
3, Value.builder() | |
.id("123") | |
.name("test3") | |
.build() | |
), | |
sortedMap | |
); | |
} | |
@Data | |
@Builder | |
@AllArgsConstructor | |
public static class Value { | |
private String id; | |
private String name; | |
} | |
public static class CustomComparator { | |
private static final Map<String, Integer> valueOrderMap = | |
Map.of( | |
"test1", 1, | |
"test2", 2, | |
"test3", 3 | |
); | |
public static Integer getValueOrder(final String value) { | |
return valueOrderMap.get(value); | |
} | |
} | |
} |
'Java > series' 카테고리의 다른 글
[Java 14편] 자바 스트레지트 패턴 (0) | 2023.02.11 |
---|---|
[Java 13편] 정적 팩토리 메서드로 객체 생성 (0) | 2023.02.11 |
[Java 11편] Extend enum (EnumMap) (0) | 2023.01.05 |
[Java 10편] Functional Interface 정리 (0) | 2022.12.01 |
[Java 9편] 자바 BigDecimal 소수점 계산 주의사항 (0) | 2022.11.19 |
댓글