比较两个列表并从一个列表中删除重复项

JMM*_*JMM 4 java collections equals duplicates

我有一个名为FormObject的对象,它包含两个ArrayLists - oldBooks和newBooks - 两者都包含Book对象.

oldBooks允许包含重复的Book对象newBooks不允许在其自身中包含重复的Book对象,并且不能在oldBooks列表中包含任何Book对象的重复项.

重复Book的定义很复杂,我无法覆盖equals方法,因为定义在Book对象的所有用途中都不是通用的.

我打算在FormObject类上有一个名为removeDuplicateNewBooks的方法,它将执行上述功能.

你会如何实现这个?我的第一个想法是使用HashSets消除重复但不能覆盖Book对象上的equals意味着它将无法工作.

Boz*_*zho 7

您可以使用TreeSet自定义Comparator<Book>:

  • 构建TreeSetComparator实现你想要的自定义逻辑
  • 使用 set.addAll(bookList)

现在Set只包含独特的书籍.