首页 > 解决方案 > 具有 2 个过滤条件的 java 流

问题描述

我正在尝试使用 2 个条件 aList进行过滤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());

我不想创建结果对象,在此先感谢。

标签: javajava-8java-stream

解决方案


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());
}

推荐阅读