List<Action> action = noDuplicate Object();
List<Action> actions = duplicate Object();
我想同时添加列表并且只有不同的对象?有什么建议吗?请不要使用覆盖等于和hashcode()
方法,因为我无法放置,因为它是由 JAXB 生成的。
您可以执行以下操作。
-
创建新的包装类
类 ActionWrapper {私人行动;此处基于操作字段的等于和哈希代码}
-
使用"设置"而不是"列表
"> 最后转换设置为列出类似以下内容
actionWrappers.stream().map((s) -> s.getAction()).collect(Collectors.toList())
您可以向后循环访问列表,然后在其余列表中找到重复项,然后检查每个项目: 如果发现重复项,请删除当前项并继续。
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));
}
}