如何在Java中基于同一索引值同时从两个Arraylist中删除元素

时间:2018-09-26 19:36:23

标签: java arraylist collections

我有两个包含两个字符串集的arraylists,例如List domainList包含{'gmail','yahoo','yahoo','aol'},而list flagList包含{'Y,'N',' N','Y'}。因此,由于yahoo在列表中是两次,因此我必须从该domainList中删除一个'yahoo'并从flagList中删除其对应的标志。重发列表将为{'gmail','yahoo', 'aol'}和{'Y','N','Y'}。我不确定该怎么做。

有人可以帮助我吗?

2 个答案:

答案 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