Как одновременно удалить элементы из двух Arraylists на основе одного и того же значения индекса в Java - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть два массива, которые содержат два набора строк. Например, список domainList содержит {'gmail', 'yahoo', 'yahoo', 'aol'}, а список flagList содержит {'Y,' N ','N ',' Y '}. Так как теперь yahoo дважды в списке, я должен удалить одно' yahoo 'из этого domainList, а также соответствующий ему флаг из flagList. Список результатов будет {' gmail ',' yahoo ','aol'} и {'Y', 'N', 'Y'}. Я не уверен, как это сделать.

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Как отметили в комментариях ребята, вы можете изучить создание класса для хранения связанной информации, а затем использовать один список экземпляров этого класса.

Однако, если вы действительно хотите удалить повторяющиеся элементыиз одного списка при синхронизации другого можно использовать 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]
0 голосов
/ 26 сентября 2018

Если ваш список содержит строки, вы можете использовать этот подход:

    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 doне забудьте переопределить методы equals () и hashcode () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...