我有两个包含两个字符串集的arraylists,例如List domainList包含{'gmail','yahoo','yahoo','aol'},而list flagList包含{'Y,'N',' N','Y'}。因此,由于yahoo在列表中是两次,因此我必须从该domainList中删除一个'yahoo'并从flagList中删除其对应的标志。重发列表将为{'gmail','yahoo', 'aol'}和{'Y','N','Y'}。我不确定该怎么做。
有人可以帮助我吗?
答案 0 :(得分:1)
正如人们在评论中指出的那样,您可以探索创建一个类来保存相关信息,然后使用该类实例的单个列表。
但是,如果您真的想从一个列表中删除重复的元素,同时使另一个列表保持同步,则可以使用Set
来跟踪已经看到的内容,并使用Iterator
进行浏览列出并删除集合中已经存在的元素:
public static void main(String[] args)
{
List<String> domainList = new ArrayList<>(Arrays.asList("gmail","yahoo","yahoo","aol"));
List<String> flagList = new ArrayList<>(Arrays.asList("Y","N","N","N"));
Set<String> seen = new HashSet<String>();
Iterator<String> di = domainList.iterator();
Iterator<String> fi = flagList.iterator();
while(di.hasNext() && fi.hasNext())
{
fi.next(); // don't care about result
String domain = di.next();
if(!seen.add(domain))
{
di.remove();
fi.remove();
}
}
System.out.println(domainList);
System.out.println(flagList);
}
输出:
[gmail, yahoo, aol]
[Y, N, N]
答案 1 :(得分:0)
如果列表中包含字符串,则可以使用以下方法:
List<String> notUniqueList = Arrays.asList("gmail", "yahoo", "yahoo", "aol");
List<String> uniqueList = new ArrayList<>(new LinkedHashSet<>(notUniqueList));
for (String s : uniqueList) {
System.out.println(s);
}
打印结果:
gmail
yahoo
aol
如果要使用自定义对象而不是String.class,请不要忘记override equals() and hashcode() methods。