2017-07-07 88 views
1

这里是我的功能:计数和列表出现内部列表排序数由DESC

public static void countKeywords(List<String> list) { 
    Map<String, Long> counts = 
      list.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting())); 
    System.out.println(counts); 
} 

这里是样品,它输出:

{alarm=2, player=1, factory=3} 

我需要它的发生次数进行排序在下降的方向。所以输出必须是这样的:

factory - 3 
    alarm - 2 
    player - 1 

我在做什么错?

+0

你尝试使用Collections.sort? – ZeldaZach

+0

@ZeldaZach究竟在哪里? – att13

+0

我觉得这是某种家庭作业问题,所以我会让你把那个部分弄出来:) – ZeldaZach

回答

1

问题是你使用的数据结构。法线贴图不能保证订单或排序。如果你使用Map作为你的结构,我会看看TreeMap API。它可以让你在你的地图构造器中定义一个比较器。

https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html

public static void countKeywords(List<String> list) { 
    Map<String, Long> counts = list.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting())); 
    System.out.println(counts); 

    TreeMap<String, Long> sortedMap = new TreeMap<String, Long>(new Comparator<String>() { 
     @Override 
     public int compare(String key1, String key2) { 
      return counts.get(key2).compareTo(counts.get(key1)); 
     } 
    }); 

    sortedMap.putAll(counts); 
    System.out.println(sortedMap); 
} 
+0

你会如何更改我的代码? – att13

+0

@ att13我加了 – Steve

+0

以上的代码让人惊叹。它的表现怎么样? – att13