我有两个数组,其中包含两组strings.For示例列表domainList包含{'gmail',' yahoo ',‘two’,'aol'},并且列表flagList包含{'Y,'N','N','Y'} .So现在由于yahoo在列表中出现两次,我必须从该domainList中删除一个'yahoo',并且其从flagList.The结果列表中对应的标志将是{'gmail','yahoo','aol'}和{'Y','N','Y'}.I我不确定该怎么做。
有谁可以帮我?
发布于 2018-09-27 04:24:21
正如人们在评论中所指出的那样,您可以探索创建一个类来保存相关信息,然后使用这个类的一个实例列表。
但是,如果您确实想从一个列表中删除重复的元素,同时保持另一个列表的同步,则可以使用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]
发布于 2018-09-27 04:00:31
如果您的列表包含字符串,则可以使用此方法:
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。
https://stackoverflow.com/questions/52524943
复制相似问题