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

如何在多值HashMap中查找键?

穆彬郁
2023-03-14

我的任务是使用HashMaps和set制作同义词词典。我的主要方法中有以下代码:

public static void main(String[] args) {

        addSynonym("casa", "imobil");
        addSynonym("casa", "cladire");
        addSynonym("casa", "locuinta");
        addSynonym("casa", "camin");
        addSynonym("casa", "domiciuliu");

        addSynonym("jucarie", "joc");
        addSynonym("jucarie", "marioneta");
        addSynonym("jucarie", "papusa");
        addSynonym("jucarie", "pantin");

        addSynonym("om", "barbat");
        addSynonym("om", "persoana");

        afisarearray(getSynonyms("camin"));
    }

插入同义词和键的一种方法:

static Map<String, ArrayList<String>> synonymTable = new HashMap<String, ArrayList<String>>();

    public static void addSynonym(String word, String synonym) {
        ArrayList<String> checklist = synonymTable.get(word);
        if (checklist == null) {
            ArrayList<String> temporarylist = new ArrayList<String>();
            temporarylist.add(synonym);

            synonymTable.put(word, temporarylist);
        } else {
            synonymTable.get(word).add(synonym);
        }
    }

显示ArrayList的一种方法:

    public static void afisarearray(ArrayList<String> list) {
        if (list != null) {
            for (String s : list) {
                System.out.println(s + "\n");
            }
        } else {
            System.out.println("Empty list");
        }
    };

我想找到一个单词的所有同义词,例如单词“camin”。我写了下面的方法来做这件事,但是它不起作用,它返回一组空的键:

public static ArrayList<String> getSynonyms(String word) {
        if (word == "") {
            System.out.println("No word to serach for ");
            return null;
        } else {

            Set<String> keySet = new HashSet<String>();

            for (Map.Entry<String, ArrayList<String>> entry : synonymTable.entrySet()) {
                if (entry.getValue().equals(word)) {
                    keySet.add(entry.getKey());
                }
            }

            if (keySet.isEmpty()) {
                System.out.println("No keys found");
                return null;
            } else {

                ArrayList<String> newlist = new ArrayList<String>();

                for (String s : keySet) {
                    newlist.addAll(synonymTable.get(s));
                }
                return newlist;
            }
        }
    }

问题是在这里面,如果:

if (entry.getValue().equals(word))

是数组列表和字符串之间的比较。我不知道如何纠正它。

共有1个答案

江佐
2023-03-14

试试这个,我还清理了一下你的代码,以提高可读性

public static List<String> getSynonyms(String word) {
    if (word == null || word.trim().isEmpty()) {
        System.out.println("No word to serach for ");
        return null;
    }

    Set<String> keySet = new HashSet<String>();

    for (Map.Entry<String, List<String>> entry : synonymTable.entrySet()) {
        if (entry.getValue().contains(word)) {
            keySet.add(entry.getKey());             
        }
    }

    if (keySet.isEmpty()) {
        System.out.println("No keys found");
        return null;
    }
    
    //de-dupe and sort
    Collection<String> terms = new TreeSet<>();

    for (String s : keySet) {
        terms.addAll(synonymTable.get(s));
    }
    
    return new ArrayList<>(terms);
}
 类似资料:
  • 在我的程序中,我有类似测试#6的错误:leastcommon({})exp。异常:第16行堆栈跟踪上的IllegalArgumentExceptionyour exceptionNoSuchElementException:NoSuchElementException LestCommon,第16行结果:fail } 如何用我的程序修正?

  • 我很难在hashmap中的字符串数组中找到一个元素。我有一个字符串,它确实在这个String[]里面,但执行以下操作不起作用。 我的目标是在找到值的地方找到我的HashMap的对应键。 以我的地图示例为例: 如果搜索字符串,我希望有一个新的字符串数组,它将是: 我也尝试使用,但没有成功。 我做错了吗?谢谢!

  • 问题内容: 我试图将值添加到具有以下结构的多值HashMap中: 我其实是想坚持一个特定项目(A View的Android中的如信息)的引用,所以值将包含的项目是唯一的,的旨意所包含的项X坐标值。用户在屏幕上可以有很多项目,他也可以有100个具有相同ID的项目,因此相应地,列表将包含每个项目X坐标值。 更清楚地说,我的HashMap将包含以下数据 {1,{200,400.5,500.6 …}},其

  • 问题内容: 如何获得此映射中第一个键的第三个值?这可能吗? 问题答案: 存在执行此操作的库,但是最简单的普通Java方法是创建如下所示的:

  • 问题是如何使用方法在HashMap中pritn值=1的图书?在代码中,ive删除了数组中的书籍,这样代码就可以更短。

  • 问题内容: 我有一个类似于下面的多维数组。我试图实现的是一种从数组中查找和获取“ Total”值最高的数组的方法,现在我知道有一个称为的函数,但不适用于像这样的多维数组。 我想做的是创建一个foreach循环并仅使用总数构建一个新数组,然后使用它来找到最大值,这将起作用,唯一的问题是检索与此相关的其余数据最大值。我不确定这也是最有效的方法。 有任何想法吗? 问题答案: 从PHP 5.5开始,您可以