2016-05-12 8 views
0

例: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 =文書番号単語がファイル

私はDOCID変数と周波数のドキュメントタイプのオブジェクトを作成した上でつくれ何回

1 =。

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; 
    } 

そして

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

文書のリストが必要な場合は、作成しないでください。 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); 

代替がグアバのMultimapはを使用することであろう、見here

+0

の.map(D - > d.getFrequencia())を返します: 'インターフェイスストリームのメソッドマップは、指定された型には適用できません。 必須:機能<?スーパードキュメンタ、? R、Tは、型変数です は、(>関数に変換することはできません。<スーパーDocumento ,? Rを拡張し、引数の不一致?)型の変数(S)R を推測することはできません: 理由は:R> が見つかりました。拡張します R extendsメソッドで宣言されたオブジェクト map(Function <?super T、?extends R>) Tは、ストリームStreamで宣言されたオブジェクトを拡張します。 –

1
Map<String, List<Documento>> 

明らかに、残りのコードを変更する必要があります。

たとえば、辞書に何かを追加する必要がある場合は、最初にその単一のドキュメントでListを作成する必要がある場合は、既に作成済みのリストを取得してそこにドキュメントを追加する必要があります。

関連する問題