Java 8 使用 2 个字段进行排序

标签 java sorting java-8 java-stream

根据一些条件,我从 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/

相关文章:

java - 获取 Dbus 的 Java 绑定(bind)以在 Android 上运行

java - AsyncTask 中的 Toast

java - mockito 拒绝将 TypeSafeMatcher 与通用方法 API 配对

collections - Java8 : Use filters/predicates along with disjunction

java - 在java 8中按多个字段名分组

java - 在java中,更新一个对象时会发生什么?

java - 如何在 Java 中解析时间?

linux - Unix 命令 "uniq"和 "sort"

c - 如何编写通用函数对 C 中的字符串数组进行排序?

matlab - 根据第二个矩阵中给定的顺序对矩阵进行排序 (MATLAB)