List<Action> action = noDuplicate Object();
List<Action> actions = duplicate Object();
我想添加两个列表并且只有不同的对象?有什么建议吗?请不要使用覆盖的equals和hashcode()
方法,因为我无法放置,因为它是由JAXB生成的。
答案 0 :(得分:1)
您可以执行以下操作。
创建新的包装类
类ActionWrapper { 私人行动; //这里基于操作字段等于和哈希码 }
使用Set而不是List
最后将set设置为list actionWrappers.stream().map((s) -> s.getAction()).collect(Collectors.toList())
答案 1 :(得分: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));
}
}