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)
试试这个
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)
您可以将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)