我有一个二维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;]]
答案 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();