有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java HashMap自定义对象

例如:

d1=“天空是蓝色的”

d2=“这辆车是蓝色的”

Key          Value
the          [<d1,1>,<d2,1>]
sky          [<d1,1>]
is           [<d1,1>,<d2,1>]
blue         [<d1,1>,<d2,1>]
car          [<d2,1>]

其中: 键=字符串

例:

<d1,1>

d1=文档id

1=文件中单词apear的次数

我用docid变量和频率创建了一个文档类型对象

public class Documento {

    private final int docid;
    private final int frequencia;

    public Documento(int docid, int frequencia) {
        this.docid = docid;
        this.frequencia = frequencia;
    }

    public int getDocid() {
        return docid;
    }

    public int getFrequencia() {
        return frequencia;
    }

    @Override
    public boolean equals(Object o) {
        if ((o instanceof Documento) && docid == ((Documento) o).docid && frequencia == ((Documento) o).frequencia) {
            return true;
        }
        return false;
    }

以及dictionary类,该类是具有

public class Dicionario {

    public Map<String, Documento> indice = new HashMap<>();

    public void InsereDicionario(String palavra, int docid) {
        int cont = indice.containsKey(palavra) ? indice.get(palavra).getFrequencia() : 0;
        indice.put(palavra, new Documento(docid, cont + 1));
    }

    public int frequencia(String palavra) {
        return indice.get(palavra).getFrequencia();
    }

    public void criaDicionario(String entrada) {
        String[] palavras = entrada.split("\\s+");
        for (int i = 0; i < palavras.length; i++) {
            InsereDicionario(palavras[i], 1);
        }

    }
    public void ListaPalavras(){
        for(String key:indice.keySet()){
            System.out.println("");
        }

}

但我真正需要的是一个字典的文件清单,我不知道如何做到这一点,有人可以帮我吗

还是有更简单的方法


共 (2) 个答案

  1. # 1 楼答案

    Map<String, List<Documento>>
    

    显然,您需要修改代码的其余部分

    例如,当您需要向字典中添加某些内容时,如果这是您第一次需要使用单个文档创建List,那么下次您需要使用已经创建的列表并在那里添加文档

  2. # 2 楼答案

    如果你需要一个文档列表,为什么不创建一个呢?使用Java8,这变得更加方便:

    例如:

    public Map<String, List<Documento>> indice = new HashMap<>();
    
    //register new word
    indice.putIfAbsent(palavra, new ArrayList<>());
    //add additional occurence
    indice.get(palavra).add(documento);
    //get frequency
    int frequencia = indice.get(palavra)
                           .stream()
                           .map(d -> d.getFrequencia())
                           .reduce(0, (s, i) -> s + i);
    

    另一种选择是使用番石榴的多重地图,见here