有什么方法可以将流图过滤器和映射返回Java 8中的原始对象?

Ash*_*inK 4 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);
    }

});
Run Code Online (Sandbox Code Playgroud)

但是有什么方法可以使用以下方法吗?

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());
Run Code Online (Sandbox Code Playgroud)

Had*_*i J 7

试试这个

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


Nam*_*man 5

您可以将filteras 扩展为:

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