【问题标题】:Java count string occurrence and sort in reverse orderJava计数字符串出现并以相反的顺序排序
【发布时间】:2018-07-13 00:59:45
【问题描述】:

我在尝试计算字符串出现次数并按降序排序时遇到了一些麻烦。以下是示例输入列表:

test, test, to, to, to, to, today, tomorrow, today

所需的输出是这样的:

to, test, today tomorrow

这是我计算字符串出现次数并按相反顺序排序的代码:

Map<String, Integer> sortedTextSegmentList = new LinkedHashMap<String, Integer>();
 for (String s : textSegmentList) {
     if (sortedTextSegmentList.get(s) != null) {
         sortedTextSegmentList.put(s, sortedTextSegmentList.get(s) + 1);
     } else {
         sortedTextSegmentList.put(s, 1);
     }
 }

 sortedTextSegmentList.entrySet().stream()
         .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
         .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (x, y)-> {throw new AssertionError();}, LinkedHashMap::new
         ));

但是,我得到了这个输出:

test, to, today, tomorrow

当我尝试打印时:

sortedTextSegmentList.forEach((key, value) -> {
         System.out.println("KEY" + key);
         System.out.println("VALUE  " + value);
 });

我正在测试 2,到 4,明天 1,今天 2,计数器是正确的。但是,它只是不按降序排序。有什么想法吗?

谢谢!

【问题讨论】:

  • 您可能想看看使用TreeMapSortedMapdocs.oracle.com/javase/8/docs/api/java/util/SortedMap.html
  • 您正在丢弃已排序的地图并打印原始地图...
  • @shmosel 如何访问排序后的地图?
  • sortedTextSegmentList = sortedTextSegmentList.entrySet().stream().sorted(...).collect(...);
  • 我看到我看到效果很好。谢谢!

标签: java string sorting linkedhashmap


【解决方案1】:

虽然您使用LinkedHashMap 应该会导致结果保持其顺序,但您实际上从未将collect 操作的结果分配给sortedTextSegmentList。因此,您的 forEach 正在迭代您创建的第一个地图,该地图未按您想要的方式排序。

【讨论】:

    【解决方案2】:

    我认为您一直在查看“sortedTextSegmentList”,它按照您看到它们的顺序出现,即“测试,到,今天,明天”

    试试下面:

    LinkedHashMap sortedMap = sortedTextSegmentList.entrySet().stream()
             .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
             .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (x, y)-> {throw new AssertionError();}, LinkedHashMap::new
             ));
    

    sortedMap 的数据应该按照您要查找的顺序排列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多