Java 按值对AtomicLongMap排序

Java 按值对AtomicLongMap排序,java,sorting,dictionary,guava,Java,Sorting,Dictionary,Guava,我使用番石榴原子长图来计算文档中的短语数量 AtomicLongMap frequentPhrases = AtomicLongMap.create(); frequentPhrases.getAndIncrement(phrase.trim()); 一切都像一个符咒,但我找不到一种方法来排序,地图的数量发生 您可以将条目保存到列表,然后按条目的值按相反顺序排序: List<Map.Entry<Object, Long>> sorted = new Array

我使用番石榴原子长图来计算文档中的短语数量

AtomicLongMap frequentPhrases = AtomicLongMap.create();
frequentPhrases.getAndIncrement(phrase.trim());

一切都像一个符咒,但我找不到一种方法来排序,地图的数量发生

您可以将条目保存到
列表
,然后按条目的值按相反顺序排序:

List<Map.Entry<Object, Long>> sorted = 
    new ArrayList<>(frequentPhrases.asMap().entrySet());
Collections.sort(sorted, Collections.reverseOrder(Map.Entry.comparingByValue()));

for (Map.Entry<Object, Long> entry : sorted) {
    System.out.println(entry); // Or something more useful
}
已排序的列表=
新的ArrayList(frequentPhrases.asMap().entrySet());
Collections.sort(已排序,Collections.reverseOrder(Map.Entry.comparingByValue());
for(Map.Entry:已排序){
System.out.println(entry);//或更有用的东西
}

您到底想实现什么目标?你的意思是想按值的升序/降序迭代映射吗?是的,在添加所有条目后,我想迭代下降不错。不过我看到了一个问题:比赛条件。如果在
Collections.sort
调用之后,其他线程正在修改
frequentPhrases
,则输出将是错误的。@Brian yup-从线程安全对象中取出条目并自己操作它们的那一刻,您就失去了原子性的所有承诺。整个街区都应该受到保护,我同意。也许通过复制条目值而不是引用原始值来放弃解决方案的一些优雅性会有所帮助。这样就可以及时获得快照。可能有用。