Гуава: как совместить фильтр и преобразование? - PullRequest
47 голосов
/ 25 ноября 2010

У меня есть коллекция строк, и я хотел бы преобразовать ее в коллекцию строк, в которых все пустые или нулевые строки удалены, а все остальные обрезаны.

Я могу сделать это в два этапа:

final List<String> tokens =
    Lists.newArrayList(" some ", null, "stuff\t", "", " \nhere");
final Collection<String> filtered =
    Collections2.filter(
        Collections2.transform(tokens, new Function<String, String>(){

            // This is a substitute for StringUtils.stripToEmpty()
            // why doesn't Guava have stuff like that?
            @Override
            public String apply(final String input){
                return input == null ? "" : input.trim();
            }
        }), new Predicate<String>(){

            @Override
            public boolean apply(final String input){
                return !Strings.isNullOrEmpty(input);
            }

        });
System.out.println(filtered);
// Output, as desired: [some, stuff, here]

Но есть ли в Гуаве способ объединить два действия в один шаг?

1 Ответ

80 голосов
/ 26 апреля 2012

В следующей последней версии (12.0) Guava будет класс с именем FluentIterable .Этот класс предоставляет отсутствующий свободный API для такого рода вещей.

Используя FluentIterable, вы должны быть в состоянии сделать что-то вроде этого:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...