如何做到这一点:
int size = ...
var a = new ArrayList<String>();
for (Map.Entry<String,Integer> e : myHashMap) {
a.add( String.format("%s %.3f", e.getKey(), 100.0 * e.getValue() / size));
}
使用
Stream
?
int size = ...
var a = myHashMap.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.map(Map.Entry::getValue)
.toList();
如何同时使用
getValue
和 getKey
并使用 String.format
组合它们?
这可以通过使用 lambda 表达式 (
e -> String.format(...)
) 而不是方法引用表达式 (Map.Entry::getValue
) 来实现。
int size = ...
var a = myHashMap.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.map(e -> String.format("%s %.3f", e.getKey(), 100.0 * e.getValue() / size))
.toList();
感谢@Sweeper的这种方法。 一旦你找到答案,它总是显而易见的。