【发布时间】:2017-08-09 17:39:38
【问题描述】:
我正在尝试利用 Java 的函数库从列表中过滤掉一些条目。
我有一个 Book 对象列表,首先按 Book ID 排序,然后按修订号排序。下面的示例我在列表中有九个 Book 对象。
Book: ID 1, Revision Number 1
Book: ID 1, Revision Number 2
Book: ID 1, Revision Number 3
Book: ID 2, Revision Number 1
Book: ID 2, Revision Number 2
Book: ID 2, Revision Number 3
Book: ID 3, Revision Number 1
Book: ID 3, Revision Number 2
Book: ID 3, Revision Number 3
我想过滤列表,以便我只有每个图书 ID 的最高修订号。
Book: ID 1, Revision Number 3
Book: ID 2, Revision Number 3
Book: ID 3, Revision Number 3
Java 是否具有使用过滤器或比较器之类的功能来允许我根据多个字段、基于公共值(图书 ID)进行过滤?我想尽量避免编写自己的函数来遍历集合并尽可能进行过滤...有什么建议吗?
【问题讨论】:
-
可能是
TreeSet和一些比较器 -
可以用merge功能采集到map,可行吗?
-
如果您使用的是 java 8 并且事先知道要过滤的值,请参阅stackoverflow.com/questions/122105/… 基于Collection.removeIf() 的解决方案可能最适合您的需求
-
你可以做类似
books.stream().collect(groupingBy(Book::getId, maxBy(Comparator.comparing(Book::getRevision))))