从二维ArrayList中删除重复项

时间:2012-03-28 18:30:29

标签: java

我有一个二维ArrayList,我需要过滤掉重复的内容。

generateRows的当前结果:[[" one"],[" two"],[" three"],[" one&#34 ;]]

Java伪代码:

ArrayList<ArrayList<String>> rows = new ArrayList<ArrayList<String>>();
rows = generateRows(); //method not shown, but returns a ArrayList<ArrayList<String>>
Set<String> set = new LinkedHashSet<String>();
for (ArrayList<String> list:rows) {
    set.addAll (list);
}
rows.clear();
rows.add(new ArrayList<String>(set));
运行转换代码后的

当前结果:[[one,two,three]]

期望的结果:[[&#34; one&#34;],[&#34; two&#34;],[&#34; three&#34;]]

2 个答案:

答案 0 :(得分:2)

保持代码与您发布的内容相同,这是您必须做的。

ArrayList<ArrayList<String>> rows = new ArrayList<ArrayList<String>>();
rows = generateRows(); //method not shown, but returns a ArrayList<ArrayList<String>>
Set<ArrayList<String>> set = new LinkedHashSet<ArrayList<String>>();
set.addAll(rows);
rows.clear();
rows.addAll(set);

日常生活中的主要问题:

Set<String> set = new LinkedHashSet<String>();你说set将包含String类型,而你真正的唯一对象是ArrayList类型

答案 1 :(得分:1)

您无法将String值("one""two""three")存储在应存储ArrayList<String>值的列表中。

要存储三个字符串,您需要创建一个类型为ArrayList<String>的新列表。

ArrayList<ArrayList<String>> rows = new ArrayList<ArrayList<String>>();
rows = generateRows();
Set<String> set = new LinkedHashSet<String>();
for (ArrayList<String> list:rows) {
    set.addAll (list);
}

//rows.clear();
//rows.add(new ArrayList<String>(set));

ArrayList<String> noDups = new ArrayList<String>(set);

顺便说一下,

  • 这些行......

    ArrayList<ArrayList<String>> rows = new ArrayList<ArrayList<String>>();
    rows = generateRows();
    

    相当于

    ArrayList<ArrayList<String>> rows = generateRows();
    

  • 您应该更喜欢对接口进行编程而不是具体的类,所以如果我是你,我会把它写成

    List<List<String>> rows = generateRows();