[英]How to simulteniously delete elements from two Arraylists based one same index value in java
我有两个包含两组字符串的数组列表。例如列表域列表包含 {'gmail','yahoo','yahoo','aol'},列表 flagList 包含 {'Y,'N','N', 'Y'} .所以现在因为 yahoo 在列表中出现了两次,所以我必须从这个 domainList 中删除一个 'yahoo' 以及从 flagList 中删除它的相应标志。结果列表将是 {'gmail','yahoo','aol' } 和 {'Y','N','Y'}。我不知道该怎么做。
谁能帮我?
正如人们在评论中指出的那样,您可以探索创建一个类来保存相关信息,然后使用此类的单个实例列表。
然而,如果你真的想从一个列表中删除重复的元素同时保持另一个同步,你可以使用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]
如果您的列表包含字符串,您可以使用这种方法:
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,请不要忘记覆盖 equals() 和 hashcode() 方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.