J'ai une collection de chaînes et j'aimerais la convertir en une collection de chaînes si toutes les chaînes vides ou nulles sont supprimées et toutes les autres sont tronquées.
Je peux le faire en deux étapes:
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]
Mais existe-t-il une manière goyave de combiner les deux actions en une seule étape?
Dans le a venir dernière version (12.0) de Guava, il y aura une classe nommée FluentIterable . Cette classe fournit l'API courante manquante pour ce genre de choses.
En utilisant FluentIterable, vous devriez pouvoir faire quelque chose comme ceci:
final Collection<String> filtered = FluentIterable
.from(tokens)
.transform(new Function<String, String>() {
@Override
public String apply(final String input) {
return input == null ? "" : input.trim();
}
})
.filter(new Predicate<String>() {
@Override
public boolean apply(final String input) {
return !Strings.isNullOrEmpty(input);
}
})
.toImmutableList();