Необходим доступ к нескольким методам для сравнения объектов - PullRequest
0 голосов
/ 16 января 2019

После прочтения документации Oracle я не нашел то, что искал. У меня есть объект, который можно сравнивать по-разному, но одним из его атрибутов является список. Как я могу сравнить на основе размера этого атрибута списка?

Comparator comparator = Comparator.comparing(Product::getCommentList::size);
List<Product> soldL = new LinkedList();
soldL.addAll(sold);
Collections.sort(soldL,comparator);

Я попробовал код выше безуспешно.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вы можете просто использовать лямбду и улучшить существующий код следующим образом:

Comparator<Product> comparator = Comparator.comparing(p -> p.getCommentList().size()); // type 'Product' bound
List<Product> soldL = new LinkedList<>(); // type inferred '<>'
soldL.addAll(sold);
soldL.sort(comparator); // use 'List.sort'

Редактировать : вместо сравнения можно использовать comparingInt *чтобы избежать бокса как:

Comparator<Product> comparator = Comparator.comparingInt(p -> p.getCommentList().size()); 
0 голосов
/ 16 января 2019

Вы можете упростить сравнение, применив метод Product, который возвращает размер списка (например: public int getCommentListSize() { return commentList.size(); }).

Таким образом, вы можете создать компаратор следующим образом:

Comparator comparator = Comparator.comparing(Product::getCommentListSize);

После этого вы передаете компаратор методу сортировки.

...