1
我有兩個文件說file1.txt和file2.txt。這兩個文件包含由<TAB>
查找與維護排序的兩個文件的交集
例如文件分離部分內容1包含
123abc us.online.com
ab123 us.online.co
文件2包含
123abc us.zhang.com
456def us.ppd.456def
def56 cn.online.pek
ab123 us.portlet.co
現在,我需要找到在Java中,這兩個文件的基礎交集就是第一場。所以我的輸出應該基本上是
123abc us.online.com 123abc us.zhang.com
ab123 us.online.co ab123 us.portlet.co
有沒有一種有效的方法來做到這一點在Java?這是我到目前爲止所嘗試的
List<String> logRid = new ArrayList<String>();
List<String> fatalRid = new ArrayList<String>();
File logFile = new File("logs.txt");
File rtlaFile = new File("rtla.txt");
BufferedReader reader = null;
public List<String> readFiles(){
try
{
reader = new BufferedReader(new FileReader(logFile));
String text = null;
while((text = reader.readLine()) != null)
{
logRid.add(text);
}
}
catch (Exception e) {
e.printStackTrace();
}
try
{
reader = new BufferedReader(new FileReader(rtlaFile));
String text = null;
while((text = reader.readLine()) != null)
{
fatalRid.add(text);
}
}
catch (Exception e1) {
e1.printStackTrace();
}
return this.intersection(logRid, fatalRid);
}
public <T> List<T> intersection(List<T> list1, List<T> list2)
{
List<T> list = new ArrayList<T>();
for (T t : list1) {
if(list2.contains(t)){
list.add(t);
}
}
return list;
}
我能夠得到交集,唯一的問題是維護順序。
你試過什麼算法/邏輯?請發佈你的代碼? – Hariharan
我認爲最簡單的方法就是使用Maps(HashMap)。只是1)解析你的文件到兩個地圖中,2)在單個foreach循環中合併兩個地圖 –
我同意Map的想法;然而,只需要一個Map就可以立即處理第二個文件(如果它很重要,也可以用來維護排序)。如果這兩個文件中的鍵都是(或可以)排序的,那麼一個簡單的2路合併循環就可以完成。另外,將數據加載到SQLite首先xD – user2864740