如何在java中组合arraylists?

时间:2014-02-15 22:58:54

标签: java arraylist machine-learning nlp combinations

我有一个ArrayList的ArrayList,如下所示:

s1_1,s1_2
s3_4,s3_5
s1_2,s1_3
s3_5,s27_1

此示例中的每一行都是一个ArrayList。例如,第一个ArrayList由两个元素(s1_1 and s1_2)组成。

我需要的是组合具有共同元素的ArrayList。 例如,在上面的示例中,必须组合第一个和第三个ArrayList。此外,第二行和第四行必须创建一个新的ArrayList,其中包含所有元素。

为了便于理解,我正在研究文本中的共同引用。上面的示例显示s1_1s1_2是文本中的共同引用。另一方面,第三行显示s1_2s1_3也是共同参照物。所以,我希望有一个共同引用链,其中包括所有三个要素:s1_1s1_2s1_3

但是,我不知道怎么做!乍一看似乎很容易,但在实施过程中我感到困惑!

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

让我们假设您有一个要组合的ArrayLists列表(lists = List<ArrayList>)。

所以我会做这样的事情

Set<ArrayList> answer = new HashSet<ArrayList>();
for (int i = 0 ; i < lists.size() ; i++) {
  ArrayList list = lists.get(i);
  Set<Integer> usedLists = new HashSet<Integer>();
  ArrayList combinedList = new ArrayList();
  for (Object obj : list) {
    for (int j = i ; j < lists.size ; j++) {
      ArrayList list2 = lists.get(j);
      if (list2.contains(obj) && !usedLists.contains(j)) {
         combinedList.addAll(list2);
         usedLists.add(j);
      }
    }
  }
  answer.add(combinedList);
}

这样做是看每个列表。对于列表中的每个对象,查找包含它的列表,并添加包含它的列表的所有元素。添加列表后,我会跟踪哪些列表添加到新列表中(使用列表列表中的索引),这样如果两个列表有两个公共元素,则列表不会添加两次。

希望有所帮助!