首页 > 解决方案 > 如何在java中基于一个相同的索引值同时从两个Arraylists中删除元素

问题描述

我有两个数组列表,其中包含两组字符串。例如列表 domainList 包含 {'gmail','yahoo','yahoo','aol'},列表 flagList 包含 {'Y,'N','N', 'Y'} 。所以现在因为 yahoo 在列表中出现了两次,我必须从这个 domainList 中删除一个 'yahoo' 以及从 flagList 中删除它的相应标志。结果列表将是 {'gmail','yahoo','aol' } 和 {'Y','N','Y'}。我不知道该怎么做。

谁能帮我?

标签: javaarraylistcollections

解决方案


正如人们在评论中指出的那样,您可以探索创建一个类来保存相关信息,然后使用此类实例的单个列表。

但是,如果您真的想从一个列表中删除重复的元素同时保持另一个列表同步,您可以使用 aSet来跟踪已经看到的内容,并使用 aIterator遍历列表并删除集合中已经存在的元素:

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]

推荐阅读