繁体   English   中英

如何将每条记录与同一List Java中的所有其他记录进行比较?

[英]How to compare each record with all other records in a same List Java?

我有一个清单:

List<BookDTO> bookList = libraryDTO.getBooks();

int bookCounter = 0;
for (BookDTO bookdto : bookList)
{
       if ((!errors.isEmpty() && !errors.containsKey("book[" + bookCounter + "].bookRefNo") || errors.isEmpty()) &&
           // do comparison for each record with other records in same list ) {

           errors.put("book[" + bookCounter + "].bookRefNo", messageSource.getMessage("bookRefNo.cannot.be.same", null, null));
        }

    bookCounter++;
    }

现在,我不知道如何进行比较检查..基本上如果有匹配的记录(具有相同值的记录),我应该得到密钥。

我不明白是否有两本具有相同值的书籍会引发错误(看起来如此看待你的代码)或者你是否只想在计算时跳过它。

在任何情况下,如果没有为每个元素循环整个集合(即O(n ^ 2)复杂度),则不能使用不考虑密钥的数据结构。

你能用一套比较合适的东西吗?

List<BookDTO> bookList = libraryDTO.getBooks();
Set<BookDTO> bookSet = new HashSet<BookDTO>(bookList);

bookCounter = bookSet.size();

当然,这假设BookDTO具有equals(..)hashCode()正确实现。 您甚至可以使用像TreeSet<BookDTO>这样的有序集,但这会假设BookDTO implements Comparable<BookDTO>

好吧,我猜你的BookDTO有一个bookRefNo属性,你不希望有多本同一本书的书.RefNo。

一种解决方案是依赖于Set不包含重复元素的事实,因此在循环中你可以做这样的事情:

Set<String> bookRefs = new HashSet<String>();
for (BookDTO bookdto : bookList)
{
    if (!bookRefs.add(bookDto.getBookRef()))
    {
        // if we are here we tried to insert the same bookRef more than once...
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM