Come convertire un Map<String, Double>
in List<Pair<String, Double>>
in Java 8?Come convertire la mappa in elenco in Java 8
Ho scritto questa implementazione, ma non è efficace
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;
So che dovrebbe lavori utilizzando .collect(Collectors.someMethod())
. Ma non capisco come farlo.
Si noti che '-e.getValue()' non riordina i NaN. L'ordine in avanti presuppone avere valori 'Double.NaN' alla fine dell'elenco. Usando meno unario annullerai tutto * tranne * NaN: saranno ancora alla fine della lista. –
Sì, 'Map.Entry.comparingByValue (Comparator.reverseOrder())' o 'Collections.reverseOrder (Map.Entry.comparingByValue())'. Se si confrontano i valori negativi è inteso [Tagir ha spiegato la differenza] (http://stackoverflow.com/questions/35107550/how-to-convert-map-to-list-in-java-8#comment57966768_35107595), quindi 'Comparator .comparingDouble' dovrebbe essere preferito per evitare il reinserimento dei valori. – Holger