Jak przekonwertować plik Map<String, Double>
na List<Pair<String, Double>>
w języku Java 8?Jak przekonwertować mapę na listę w języku Java 8
Napisałem tę realizację, ale to nie jest wydajne
Map<String, Double> implicitDataSum = new ConcurrentHashMap<>();
//....
List<Pair<String, Double>> mostRelevantTitles = new ArrayList<>();
implicitDataSum.entrySet().stream().
.sorted(Comparator.comparing(e -> -e.getValue()))
.forEachOrdered(e -> mostRelevantTitles.add(new Pair<>(e.getKey(), e.getValue())));
return mostRelevantTitles;
wiem, że powinno to działa przy użyciu .collect(Collectors.someMethod())
. Ale nie rozumiem, jak to zrobić.
Należy zauważyć, że '-e.getValue()' nie zmienia kolejności NaN. W zleceniu forward zakłada się wartość 'Double.NaN' na końcu listy. Używając jednolity minus, wszystko zostanie odwrócone * z wyjątkiem * NaN: nadal będą na końcu listy. –
Tak, 'Map.Entry.comparingByValue (Comparator.reverseOrder())' lub 'Collections.reverseOrder (Map.Entry.comparingByValue())'. Jeśli porównanie wartości ujemnych jest zamierzone [Tagir wyjaśnił różnicę] (http://stackoverflow.com/questions/35107550/how-to-convert-map-to-list-in-java-8 #comment57966768_35107595), a następnie "Komparator .comparingDouble' powinno być preferowane, aby uniknąć przepakowywania wartości. – Holger