2013-11-11 2 views
1

У меня есть два списка с объектами, где list1 (имена) имеет только fullnames without middlenams, а еще один список2 (полные имена) имеет fullnames with middle names. Если list1 имеет имя barack obama, а list2 имеет имя barack hussein obama, то это же, но с middlameame. Затем я должен удалить запись barack obama в списке1.Сравнение, обработка и удаление записи в списках в Java

Я пробовал под кодом, но он не удалял записи в списке1.

public class Test { 

     public static void main(String args[]) { 

     List<String> names = new ArrayList<>() 
     names.add("shannon sperling"); 
     names.add("john smith"); 
     names.add("Mary Smith"); 
     names.add("kim taylor"); 
     names.add("Barack obama"); 
     List<String> fullnames = new ArrayList<>(); 
     fullnames.add("Mary Elizabeth Smith"); 
     fullnames.add("Lou Henry Hoover"); 
     fullnames.add("Barack hussein obama"); 
     for(Object process :names) 
     { 
      if(fullnames.contains(process)) 
      { 
       names.remove(process); 
      } 
     } 
     System.out.println(names); 

     } 
} 

ответ

1

List.contains() проверяет наличие на одном объекте. "Barack obama" и "Barack hussein obama", очевидно, не совпадают. вам необходимо переопределить или реализовать собственный класс, реализующий List, и добавить дополнительную функцию для сравнения вашего контента так, как вам нравится. В противном случае ваш блок кода выглядит хорошо.

0

попробовать этот

for(Object process :names) 
     { 
      for(Object process1 :fullnames) 
      { 
      if(process1.contains(process)) 
      { 
       System.out.println("match found"); 
      } 
      } 
     } 
+1

Но объект не содержит метода, затмение предлагает лить process1. – sara

+0

это не сработает, потому что Object process не имеет метода '.contains()' и 'String.contains()' будет возвращать 'false', если String разделяется примером среднего имени. – Simulant

+0

полностью согласился, собирался отредактировать, прежде чем вы, ребята, –

0

Это на самом деле не достижимо с помощью String.contains(characterSequence) метода, поскольку последовательность символов должна быть непрерывной. Однако следующий рабочий код должен решить вашу проблему.

for(String fName: fullnames) 
     { 
      int i; 
      for(i =0 ; i< names.size() ;i++) 
      { 
       String mName = names.get(i); 
       String namePart[] = mName.split("\\s+"); 
       if(namePart.length > 1) 
       { 
        int j = fName.indexOf(namePart[0]); 
        if(j > -1 && fName.indexOf(namePart[1], j+namePart[0].length()) > -1) 
         break; 

       } 
      } 

      if(i < names.size()) 
      { 
       System.out.println("removing "+names.remove(i));; 

      } 
     } 

     System.out.println(names); 
Смежные вопросы