【问题标题】:Merge strings of an array list based on certain elements HOW根据某些元素合并数组列表的字符串如何
【发布时间】:2011-08-26 17:56:06
【问题描述】:

我想对文本文件中的数据列表执行一项功能,但我不知道该怎么做。我对如何操作数组和字符串的理解很薄弱,这就是我做这个项目的原因。

我的文本文件如下所示:

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, 1. 47 1. 75;
3, 2. 52 1. 74 2. 71 1. 80;
4, 3. 65 1. 61;
5, 4. 62 1. 68;

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

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

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

感谢任何意见。

【问题讨论】:

  • 您能告诉我们给定示例的预期结果吗?
  • “合并”两行是什么意思?
  • 我进行了编辑以包含预期的结果。
  • 第二列(逗号后面的数据)是否总是排序?

标签: java sorting arraylist


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我不会使用列表,我会使用地图。 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 方法)。因此,您可以轻松地确定您是否已经与正在查找的字段有一行,因为您使用感兴趣的字段作为键来查找该字段所在的类似内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-13
      • 2017-08-29
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 2016-01-29
      • 2022-07-06
      • 2021-02-23
      相关资源
      最近更新 更多