java - 在 Java 8 中,有什么方法可以流式映射过滤器和映射回原始对象吗?

标签 java java-8 java-stream

有什么方法可以将列表流式传输 --> 映射 --> 过滤 --> 映射回列表的原始对象类型?

如果我们使用 foreach 来做,有如下解决方案:

List<Query> updatedQueries = getUpdatedQueries();

List<Query> finalQueries = new ArrayList<>();
updatedQueries.forEach(query -> {

    Period period = getPeriodRequest(query);
    boolean isValidPeriod = periodService.validatePeriodicity(period);
    if(isValidPeriod &&  isMandatory(period)){
        finalQueries.add(query);
    }

});

但是有没有什么办法可以用下面的方法呢?

List<Query> updatedQueries = getUpdatedQueries();

List<Query> finalQueries = updatedQueries
        .stream()
        .map(this::getPeriodRequest) //returns the object of type Period
        .filter(period->periodService.validatePeriodicity(period))
        .filter(this::isMandatory)
        //is any way we can map back to Query object (without any object translation  function)
        .collect(Collectors.toList());

最佳答案

试试这个

List<Query> finalQueries = updatedQueries
    .stream().filter(query->{
        Period period = getPeriodRequest(query);
        return periodService.validatePeriodicity(period )&& isMandatory(period))
    })
    .collect(Collectors.toList());

关于java - 在 Java 8 中,有什么方法可以流式映射过滤器和映射回原始对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56034518/

相关文章:

java - 什么是压缩日期的最佳方式?

java - 将 Terracotta 与 Java EE 应用服务器集群结合起来有意义吗?

java - Gradle 问题 - 错误 :Execution failed for task

Java 泛型 : Cannot convert from Object to T

java - 类似 Node 模块的方式无需编译即可构建 Java 程序?

java - 使用流时出现 ConcurrentModificationException

java - ArrayList toArray 方法类转换异常

java - 无法使用 java 1.8 更新 docker 容器

java - 如何使用 Java 流在第一个和最后一个嵌套对象之间创建映射<k,v>?

java - 将嵌套的 for 循环逻辑转换为 for each 和 java 流