繁体   English   中英

java - 如何在java中基于一个相同的索引值同时从两个Arraylists中删除元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM