Is there an elegant way to use Guava to convert from a list of options to a list of existing values?
For example, the transition from
ImmutableList.of( Optional.of("Tom"), Optional.<String>absent(), Optional.of("Dick"), Optional.of("Harry"), Optional.<String>absent() )
to a list containing only
["Tom", "Dick", "Harry"]
One approach:
List<T> filterPresent(List<Optional<T>> inputs) { return FluentIterable.from(inputs) .filter(new Predicate<Optional<T>>() { @Override public boolean apply(Optional<T> optional) { return optional.isPresent(); } }).transform(new Function<Optional<T>, T>() { @Override public T apply(Optional<T> optional) { return optional.get(); } }).toList(); }
But it is verbose.
Java 8 is not an option, unfortunately.
source share