基于某些元素合并数组列表的字符串如何

时间:2011-05-16 20:24:29

标签: java sorting arraylist

我想在文本文件中的数据列表上执行一个函数,但我不知道如何去做。我对如何操作数组和字符串的理解很弱,这就是我正在做这个项目的原因。

我的文字文件如下:

0, 0. 50 0.5 66;
1, 0. 69 2. 70;
2, 0.5 48 0.5 71;
3, 1. 47 1. 75;
4, 2. 52 1. 74;
5, 2. 71 1. 80;
6, 3. 65 1. 61;
7, 4. 62 1. 68;

我正在寻找这样的结果:

0,0.50 0.5 66 0. 69 2. 70;
1,0.5 48 0.5 71;
2,17 1.75;
3,2。52 1. 74 2. 71 1. 80;
4,3。65 1. 61;
5,4。62 1. 68;

前两个条目的第二个元素是相同的(0.),我想将这些条目组合到同一行。第4和第5行也是如此。

据我所知,我必须将我的文件读入数组列表,但我不知道如何查询数组列表以查找第二个元素具有相同值的所有条目,然后将整个条目与另一个条目合并条目。

我没有要显示的代码,因为我不知道从哪里开始。

我感谢任何意见。

2 个答案:

答案 0 :(得分:5)

我不会使用列表,我会使用地图。 Map有一个方法

put(key, value)

所以,如果你对给定行的第二列感兴趣,我会做类似(伪代码)的事情

Map<String, String> lookup = new HashMap<String, String>();

for (...) {  // loop over the lines in the file

    String key = getSecondFieldFromLine(line); // implement this
    String val = lookup.get(key);


    if (val != null ) {
        merge(val, line);  // implement this according to whatever merge means
    }

    lookup.put(key, val);
}

你可能不得不调整它(例如,存储合并的结果以放入查找中),你在这里做的是利用这样的事实:对于Map,put和get操作非常快(HashMap使用每个对象上的hashCode方法。因此,您可以轻松确定您是否已经拥有要查找的字段的行,因为您使用感兴趣的字段作为键,以查找该字段所在的字段。

答案 1 :(得分:0)

我会将输入解析为列表列表(或数组数组或您喜欢的任何集合)。我将实现一个基于列表中第二个元素进行比较的Comparator。然后,您可以sort your main listarray。最后,您可以遍历列表列表,使用组合逻辑组合相邻列表,生成新列表作为结果。

另一方面,如果您的输入始终按照您的显示进行排序,那么您可以跳过比较器实现并完全排序,只需遍历您的集合执行组合