2017-04-04 31 views
-1
List<Action> action = noDuplicate Object(); 
List<Action> actions = duplicate Object(); 

我想添加列表并只有不同的对象吗?有什么建议吗?请不要使用覆盖equals和hashcode()方法,因为我无法放置,因为它是由JAXB生成的。从列表中删除重复的对象,而不会覆盖equals中的hashcode方法

+1

如果没有平等,哈希码是定义了jvm如何知道元素是否是dupos? –

+0

你说的是元素....我们需要实现equals()和hashcode()方法,在我的场景中我不能使用Action类的equals方法,因为它是从JAXB xjc生成的。 – Abhishek

+1

so no equals no hashcode no wrappers ....你确定要实现什么吗? –

回答

1

您可以执行以下操作。

  1. 创建新的包装类

    类ActionWrapper { 私人诉讼行动; //等于和基于行动领域 }

  2. 使用SET而不是List哈希代码在这里

  3. 最后转换设置列出这样的事情actionWrappers.stream().map((s) -> s.getAction()).collect(Collectors.toList())

+0

感谢您的建议...我们可以有任何答案而不使用包装类。请 ? – Abhishek

+0

不幸的是,你不知道你打算如何确定重复的对象。假设您在Action class String name,Date dateCreated中具有以下字段。只有name1 == name2和date1 == date2,action才等于另一个。我们来创建一个映射Map ,其中key = name +日期。因此,您只需将map.put(action.name + action.dateCreated,action)映射到映射您的动作,然后获取唯一值新ArrayList (map.values()) –

+0

感谢Maxim提供的建议。 – Abhishek

0

您可以在列表上向后迭代,然后检查每个项目是否在剩余列表中找到重复:如果您发现重复删除当前项目并继续。

import org.junit.Assert; 
import org.junit.Test; 

import java.util.ArrayList; 
import java.util.List; 

public class ListTest { 

    @Test 
    public void listDedup() throws Exception { 
     List<String> duplicates = new ArrayList<>(); 
     duplicates.add("a"); 
     duplicates.add("a"); 
     duplicates.add("A"); 
     duplicates.add("b"); 
     Assert.assertEquals(4, duplicates.size()); 

     /* iterate backwards, so that we can safely remove items 
     * from the list that we are iterating over 
     */ 
     for (int i = duplicates.size() - 1; i >= 0; i--) { 
      String item = duplicates.get(i); 
      // now check the remaining items in the list for duplicates 
      for (int j = i - 1; j >= 0; j--) { 
       String possibleDuplicate = duplicates.get(j); 
       // check for equality: use any comparison operation you like 
       if (item.equalsIgnoreCase(possibleDuplicate)) { 
        // this is a duplicate - remove it 
        duplicates.remove(i); 
        // break the inner loop because we already have a duplicate 
        break; 
       } 
      } 
     } 
     // only "a" and "b" reamin in the list 
     Assert.assertEquals(2, duplicates.size()); 
     Assert.assertEquals("a", duplicates.get(0)); 
     Assert.assertEquals("b", duplicates.get(1)); 
    } 
} 
相关问题