根据一些条件,我从 MongoDB 读取数据并创建一个 List<Document>
与结果集。
List<Document> documentList = new ArrayList<Document>();
示例记录如下:
documentList: [
Document{
{ _id=5975ff00a213745b5e1a8ed9,
u_id=,
visblty = 1,
c_id=5975ff00a213745b5e1a8ed8,
batchid=null,
pdate=Tue Jul 11 17:52:25 IST 2017,
locale=en_US,
subject = "Document2"
} },
Document{
{ _id=597608aba213742554f537a6,
u_id=,
visblty = 1,
c_id=597608aba213742554f537a3,
batchid=null,
pdate=Fri Jul 28 01:26:22 IST 2017,
locale=en_US,
subject = "Document2"
} }
]
使用这个文档列表,我再次使用一些条件进行过滤,然后我需要根据一些条件对过滤器记录进行排序(我将在请求中获得)。
List<Document> outList = documentList.stream()
.filter(d -> d.getInteger("visblty") == 1
&& (!StringUtils.isEmpty(req.pdate())? (d.getDate(CommonConstants.PDATE).after(afterDate)): true)
&& (!StringUtils.isEmpty(req.pdate())? (d.getDate(CommonConstants.PDATE).before(beforeDate)): true)
.sorted().skip(4).limit()
.collect(Collectors.toList());
不确定如何排序(需要根据输入动态更改排序顺序,看起来像“pdate by DESC
”或“subject by ASC"
)
喜欢:"order by pdate DESC" or "order by pdate ASC"" or "order by subject DESC"
如何使用 Document 类的 Comparator 对象进行排序。
注意:我已经尝试了人们建议的几种方法,但我还没有得到任何运气。 预先感谢您!
最佳答案
您可以按如下方式使用组比较器和并行流:
List<Document> outList = documentList.stream()
.filter(....)
.sorted(Comparator.comparing(Document::getPdate)
.thenComparing(Document::getSubject))
.parallel();
关于Java 8 使用 2 个字段进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45458256/