2016-10-03 172 views
0

我有一些文件。例如1000個文件。每個文件都有一些單詞。 例如如何在java中創建hashmap的hashmap?

文件1:你好,我是來自地球

文檔2:我是來自火星各位網友如何

文檔2:地球火星太陽

輸出應該是這樣的

[你好:doc1-1,doc2-2 doc3-0] [我:doc1-1,doc2-1,doc3-0] .....

喜歡它需要存儲單個詞及其與文件相關的頻率。

我想它需要映射。但我不知道如何做映射? 任何幫助將不勝感激

回答

0

它似乎並不需要HashMapHashmap's。真的,所有你需要的是Map,其中密鑰是String,而ValueCollection。你可以自己創建這個抽象,或者你可以使用像谷歌Guava'sMultiMap。或者,您可以使用類似於Lucene的文字,而不是從頭開始編寫查詢文檔,並跳過編寫所有這些代碼。

0

試試這個。

String[] files = { "doc1", "doc2", "doc3" }; 
int size = files.length; 
Map<String, Map<String, Long>> result = new HashMap<>(); 
for (int i = 0; i < size; ++i) { 
    Path path = Paths.get(files[i]); 
    Map<String, Long> count = Files.readAllLines(path).stream() 
     .flatMap(line -> Stream.of(line.split("\\s"))) 
     .collect(Collectors.groupingBy(x -> x, Collectors.counting())); 
    for (Entry<String, Long> e : count.entrySet()) { 
     Map<String, Long> m = result.get(e.getKey()); 
     if (m == null) 
      result.put(e.getKey(), m = new TreeMap<>()); 
     m.put(files[i], e.getValue()); 
    } 
} 
for (int i = 0; i < size; ++i) 
    for (Map<String, Long> e : result.values()) 
     e.compute(files[i], (k, v) -> v == null ? 0 : v); 
for (Entry<String, Map<String, Long>> e : result.entrySet()) 
    System.out.println(e); 

結果:

Earth={doc1=1, doc2=0, doc3=1} 
how={doc1=0, doc2=1, doc3=0} 
Mars={doc1=0, doc2=1, doc3=1} 
Hello={doc1=1, doc2=2, doc3=0} 
I={doc1=1, doc2=1, doc3=0} 
from={doc1=1, doc2=1, doc3=0} 
am={doc1=1, doc2=1, doc3=0} 
sun={doc1=0, doc2=0, doc3=1} 
+0

不錯,每一個文件是一個文本文件,這裏 像DOC 1是一個文本fiile,DOC2也是一個文本文件 如何處理呢? –

+0

謝謝,我有一個問題,在BufferedReader中我們指定了文件的路徑名,但是當我們使用路徑時它是如何得到路徑名的? –