当前位置: 首页 > 知识库问答 >
问题:

使用映射树进行映射条目转换

蒙勇
2023-03-14

概述:最初,我对这个程序的预期目的是制作一个Treemap来读取文本文档,特别是找到所有单词和单词所在的索引/行。现在我想列出一个“十大”名单,其中包含使用最多的单词。我想“翻转”我的树状图,这样整型值将是按顺序排列的,然后是字符串

public static void getTopTenWords(TreeMap<String, ArrayList<Integer>> map) {
    Set<Map.Entry<String, ArrayList<Integer>>> set = map.entrySet();
    TreeMap<Integer, String> temp = new TreeMap<Integer, String>();
    int count = 1;
    for(Map.Entry<String, ArrayList<Integer>> entry : set){
        if(temp.containsKey(entry.getValue())) {
            Integer val = entry.getValue().get(count);
            val++;
            temp.put(val, entry.getKey());
        }
        else {
            temp.put(entry.getValue().get(count), entry.getKey());
        }
        count++;
     }

}

共有1个答案

徐高懿
2023-03-14

现在我想列出一个“十大”名单,其中包含使用最多的单词。我想“翻转”我的树状图,这样整型值将是按顺序排列的,然后是字符串

请注意,映射只包含唯一键。因此,如果您试图保留count作为键,那么您需要通过创建一个具有new Integer(count)的新对象,将其放入映射中。

如果您将计数放入map中,如:-map.put(2,“someword”),则以前的计数值有可能被覆盖,因为integer缓存范围:-[-128到127]中的值。因此,如果不创建新对象,这些范围之间的整数值将为interned。因此,两个值为2integer将指向相同的integer对象,因此导致重复的键。

if (temp.containsKey(entry.getValue()))

使用上面的if语句,您将ArrayListInteger值进行比较。temp包含key这些整数。而entry中的值是arraylist。因此,这将在运行时失败。此外,因为原始映射只包含文本文件中的的位置。因此,您需要做的就是为每个单词获取arraylist的大小,并将其作为一个键。

您需要稍微修改一下代码。

public static void getTopTenWords(TreeMap<String, ArrayList<Integer>> map) {
    Set<Map.Entry<String, ArrayList<Integer>>> set = map.entrySet();

    TreeMap<Integer, String> temp = new TreeMap<Integer, String>();

    for(Map.Entry<String, ArrayList<Integer>> entry : set) {
        int size = entry.getValue().size();
        int word = entry.getKey();

        temp.put(new Integer(size), word));    
    }
}

因此,您可以看到,我只是在您的条目集中使用了大小。并将其作为放入树状图中。此外,使用new Integer(size)也非常重要。它确保每个整数引用都指向一个新对象。因此没有重复。

 类似资料:
  • 我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:

  • 前端将这个json发送到我的API 控制器:

  • 我有4张桌子: 库存(库存ID、可用数量) 一个客户可以有多个订单,而一个订单由多个orderDetails项目组成。我正在尝试将库存项目存储在由库存项目和数量整数组成的映射中。 当我尝试以这种方式持久化它时,第一个库存项目将以1的orderID添加到Order详细信息表中。但是下一个是使用2的orderID插入的(不存在)。 有什么帮助吗?

  • 我正在使用Jersey Web services(2.23),并将POJO映射用于JSON到对象的映射(Jersey-media-moxy)。我创建了一个类,如下所示: 我希望该对象的实例具有以下结构:

  • 我有一个映射定义为 其中定义如下: 反向映射是使用处理的。如何为反向映射指定自定义映射?