반응형
값별로 정렬 된 키 목록에 대한 Java 8 스트림 맵
지도가 Map<Type, Long> countByType
있고 해당 값에 따라 (최소에서 최대) 키를 정렬 한 목록을 갖고 싶습니다. 내 시도는 :
countByType.entrySet().stream().sorted().collect(Collectors.toList());
그러나 이것은 나에게 항목 목록을 제공합니다. 순서를 잃지 않고 어떻게 유형 목록을 얻을 수 있습니까?
값을 기준으로 정렬하고 싶다고 말했지만 코드에는 없습니다. 람다 (또는 메서드 참조)를 sorted
전달하여 정렬 방법을 알려줍니다.
그리고 당신은 열쇠를 얻고 싶어합니다. map
항목을 키로 변환 하는 데 사용 합니다.
List<Type> types = countByType.entrySet().stream()
.sorted(Comparator.comparing(Map.Entry::getValue))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
항목 값을 기준으로 사용자 지정 비교기로 정렬해야합니다. 그런 다음 수집하기 전에 모든 키를 선택하십시오.
countByType.entrySet()
.stream()
.sorted((e1, e2) -> e1.getValue().compareTo(e2.getValue())) // custom Comparator
.map(e -> e.getKey())
.collect(Collectors.toList());
아래와 같이 값을 기준으로지도를 정렬 할 수 있습니다. 여기에 더 많은 예가 있습니다.
//Sort a Map by their Value.
Map<Integer, String> random = new HashMap<Integer, String>();
random.put(1,"z");
random.put(6,"k");
random.put(5,"a");
random.put(3,"f");
random.put(9,"c");
Map<Integer, String> sortedMap =
random.entrySet().stream()
.sorted(Map.Entry.comparingByValue())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(e1, e2) -> e2, LinkedHashMap::new));
System.out.println("Sorted Map: " + Arrays.toString(sortedMap.entrySet().toArray()));
이것을 문제의 예로 사용할 수 있습니다.
Map<Integer, String> map = new HashMap<>();
map.put(10, "apple");
map.put(20, "orange");
map.put(30, "banana");
map.put(40, "watermelon");
map.put(50, "dragonfruit");
// split a map into 2 List
List<Integer> resultSortedKey = new ArrayList<>();
List<String> resultValues = map.entrySet().stream()
//sort a Map by key and stored in resultSortedKey
.sorted(Map.Entry.<Integer, String>comparingByKey().reversed())
.peek(e -> resultSortedKey.add(e.getKey()))
.map(x -> x.getValue())
// filter banana and return it to resultValues
.filter(x -> !"banana".equalsIgnoreCase(x))
.collect(Collectors.toList());
resultSortedKey.forEach(System.out::println);
resultValues.forEach(System.out::println);
Map<Integer, String> map = new HashMap<>();
map.put(1, "B");
map.put(2, "C");
map.put(3, "D");
map.put(4, "A");
List<String> list = map.values().stream()
.sorted()
.collect(Collectors.toList());
산출: [A, B, C, D]
다음은 StreamEx를 사용한 간단한 솔루션입니다 .
EntryStream.of(countByType).sortedBy(e -> e.getValue()).keys().toList();
ReferenceURL : https://stackoverflow.com/questions/30425836/java-8-stream-map-to-list-of-keys-sorted-by-values
반응형
'Programing' 카테고리의 다른 글
Mac없이 Xamarin Visual Studio IOS 개발? (0) | 2021.01.07 |
---|---|
CMake target_link_libraries 인터페이스 종속성 (0) | 2021.01.06 |
Alpine을 기본 이미지로 사용할 때 사용자를 추가하려면 어떻게해야합니까? (0) | 2021.01.06 |
WPF 그리드에서 자식 컨트롤 사이의 간격 (0) | 2021.01.06 |
JavaScript에서 큰 숫자가 잘못 반올림 됨 (0) | 2021.01.06 |