2017-04-04 63 views
0

我有一个类型的集合的集合Person去除重复基于条件

class Person { 
    String firstName; 
    String lastName; 
} 

我想从这个名单中删除重复的基础上,条件 - 如果有列表中的两个元素具有 相同的名字, 和姓氏在一个名字中,另一个名字为空, 然后具有姓氏的名字只保留在列表中。

对于例如: 如果有2种元素在列表中,像

  1. 的firstName = “约翰”,姓氏= “Doe的”
  2. 的firstName = “约翰”,姓氏= NULL

只有John Doe应保留在列表中。 在lastName可能为null的情况下,只要它不与列表中的另一个元素共享firstName

另外,我有一个为每个处理这些信息,

for(Person person : Persons) { 
//I would like the duplication removal happening here 
/*process(person)*/ 
} 

我怎样才能以最优化的方式实现这一目标。任何帮助不胜感激。

+0

那你至今呢? – IQV

+0

你在寻找规则吗?过滤列表? –

回答

2
List<Person> persons = Arrays.asList(
    new Person("Tom","White"), 
    new Person("Mark",null ), 
    new Person("Tom","Brown"), 
    new Person("John","Doe"), 
    new Person("Tom","Black"), 
    new Person("John",null ), 
    new Person("Tom",null)); 

    Map<String,Person> pmap = new TreeMap<String,Person>(); 

    for (Person p : persons) { 
     Person other = pmap.get(p.firstName); 
     if(other==null || other.lastName==null){ 
      pmap.put(p.firstName, p); 
     } 
    } 
    System.out.println(pmap.values()); 

输出是

Person [firstName=John, lastName=Doe], Person [firstName=Mark, lastName=null], Person [firstName=Tom, lastName=White]] 
+0

谢谢!这对我有效 – Raskill