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