Map<String, Double>
をJava 8のList<Pair<String, Double>>
に変換する方法はありますか?マップをJavaのリストに変換する方法8
私はこの実装を書いたが、それは、私はそれが作品.collect(Collectors.someMethod())
を使用しなければならないことを知っている
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;
効率的ではありません。しかし、私はそれを行う方法を理解していません。
'-e.getValue()'はNaNを並べ替えないことに注意してください。フォワードオーダーは、リストの最後に 'Double.NaN'値があると仮定します。単項マイナスを使用すると、* NaNを除くすべてのものを元に戻します。リストの末尾にはまだ入ります。 –
ええ、 'Map.Entry.comparingByValue(Comparator.reverseOrder())'または 'Collections.reverseOrder(Map.Entry.comparingByValue())'です。負の値を比較することが意図されている場合[Tagirはその違いを説明しました](http://stackoverflow.com/questions/35107550/how-to-convert-map-to-list-in-java-8#comment57966768_35107595)、コンパレータ.comparingDouble'は、値の再ボックス化を避けるために優先されるべきです。 – Holger