Java 8 Stream Filter - 基于排序的更新

标签 java sorting java-8 java-stream

我正在尝试对过滤器中的文件进行排序。

输入文档/示例记录:

DocumentList: [
    Document{
        {
            _id=5975ff00a213745b5e1a8ed9,
            u_id=,
            mailboxcontent_id=5975ff00a213745b5e1a8ed8,                
            idmapping=Document{
                {ptype=PDF, cid=00988, normalizedcid=00988, systeminstanceid=, sourceschemaname=, pid=0244810006}
            },
            batchid=null,
            pdate=Tue Jul 11 17:52:25 IST 2017, locale=en_US
        }
    },
    Document{
        {
            _id=597608aba213742554f537a6,
            u_id=,
            mailboxcontent_id=597608aba213742554f537a3, 
            idmapping=Document{
                {platformtype=PDF, cid=00999, normalizedcid=00999, systeminstanceid=, sourceschemaname=, pid=0244810006}
            },
            batchid=null,
            pdate=Fri Jul 28 01:26:22 IST 2017,
            locale=en_US
        }
    }
]

这里,我需要根据pdate进行排序。

List<Document> outList = documentList.stream()
    .filter(p -> p.getInteger(CommonConstants.VISIBILITY) == 1)
    .parallel()
    .sequential()
    .collect(Collectors.toCollection(ArrayList::new))
    .sort()
    .skip(skipValue)
    .limit(limtValue);

不确定如何排序

"order by pdate DESC"

提前致谢!

最佳答案

您可以使用 .sorted() 流 API 方法:

.sorted(Comparator.comparing(Document::getPDate).reversed())

以及完整的重构示例:

List<Document> outList = documentList.stream()
  .filter(p -> p.getInteger(CommonConstants.VISIBILITY) == 1)
  .sorted(Comparator.comparing(Document::getPDate).reversed())
  .skip(skipValue).limit(limtValue)
  .collect(Collectors.toCollection(ArrayList::new))

一些需要记住的事情:

  • 如果您不关心 List 的实现,请使用 Collectors.toList()
  • collect() 是终端操作,应作为最后一个操作调用
  • .parallel().sequential() 这完全没用 - 如果你 想要并行化,坚持使用.parallel() 如果不是,不要写 任何东西,流默认是顺序的
  • 为了排序,整个Stream会被加载到内存

关于Java 8 Stream Filter - 基于排序的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45421453/

相关文章:

java - 克隆是如何在幕后工作的?

java - 如何调试返回带有值但没有内容的字符串的 Java 字符串拆分?

c# - 基于数组对列表进行排序

Python 按自定义排序 {key :order} pair

javascript - 按相关日期对新闻项目进行排序 - Javascript

java - 从请求中获取zoneID以将请求日期和时间转换为java 8中的UTC格式

java - Dropwizard Migrations Liquibase 中代码优先的方法

java - 环境配置管理?

java-8 - Java 8 Guava Preconditions 在评估异常消息字符串时抛出 NullPointerException

java - 不支持发布版本 1.8