具有2个过滤条件的java流

时间:2018-05-17 07:26:41

标签: java java-8 java-stream

我尝试使用List Stream尝试使用private List<String> filterResources(final List<Resource> resources, final String resourceType, final String propertyName) { List<String> result = resources.stream() .filter(resource -> resource.isResourceType(resourceType)) .map(Resource::getValueMap) .map(valueMap -> valueMap.get(propertyName, StringUtils.EMPTY)) .collect(Collectors.toList()); return result.stream().filter(s -> !s.isEmpty()).collect(Collectors.toList()); 过滤2个条件:

TypeError: 'int' object is not callable

我希望不提前创建结果对象。

1 个答案:

答案 0 :(得分:9)

没有理由选择两个Stream个管道。您可以在终端操作之前在原始Stream管道上应用第二个过滤器:

private List<String> filterResources(final List<Resource> resources, final String resourceType, final String propertyName) {
    return resources.stream()
            .filter(resource -> resource.isResourceType(resourceType))
            .map(Resource::getValueMap)
            .map(valueMap -> valueMap.get(propertyName, StringUtils.EMPTY))
            .filter(s -> !s.isEmpty())
            .collect(Collectors.toList());
}