поток Java с 2 условиями фильтра - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь отфильтровать с 2 условиями 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());

Я бы не хотел создавать объект результата, заранее спасибо.

1 Ответ

0 голосов
/ 17 мая 2018

Нет причин для двух 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());
}
...