我查了很多例子,但我无法申请我的变数。 我有一个字符串列表的ArratyList。
ArrayList<List<String>> bulkUploadList = new ArrayList<List<String>>();
它看起来像这样:
[id,title,tags,description]
[4291483113.0000000000000, Camden, camdentown;london, NoValue]
[4292220054.0000000000000, IMG_2720, NoValue, NoValue]
[4292223824.0000000000000, IMG_2917, london;camdentown, NoValue]
[4292224728.0000000000000, IMG_2945, London;CamdenTown, NoValue]
我想删除那些具有相同标题和相同标签的行。 我不知道如何使用HashSet,因为我有一个字符串列表的ArrayList。
答案 0 :(得分:1)
不是最佳解决方案,但您可以从这开始:
ArrayList<List<String>> bulkUploadList = new ArrayList<List<String>>();
ArrayList<List<String>> result = new ArrayList<List<String>>();
HashSet<String> hashSet = new HashSet<>();
for(List<String> item : bulkUploadList) {
String title = item.get(1);
String tags = item.get(2);
String uniqueString = (title + "#" + tags).trim().toUpperCase();
if(!hashSet.contains(uniqueString)) {
result.add(item);
hashSet.add(uniqueString);
} else {
System.out.println("Filtered element " + uniqueString);
}
}
答案 1 :(得分:0)
正如其中一条评论中所建议的,您应该为数据创建一个类,使该类实现equals(),然后使用HashSet删除重复项。像这样。
class Foo {
String id;
String title;
String tags;
String description;
public boolean equals(Foo this, Foo other) {
return this.id.equals(other.id)
&& this.title.equals(other.title)
&& etc.
}
然后您可以使用
删除重复项 Set<Foo> set = new LinkedHashSet<Foo>(list);
as Sets不允许复制,并使用equals()方法进行检查。
您应该在此处使用linkedHashSet,因为您希望保留订单(根据您在其他地方发表的评论)。
您还应该实现与equals()一致的hashcode()方法。