文字列のコレクションがあり、それを文字列のコレクションに変換したいのですが、すべて空またはnullの文字列が削除され、他の文字列はすべてトリミングされています。
私は2つのステップでそれを行うことができます:
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]
しかし、2つのアクションを1つのステップに組み合わせるグアバの方法はありますか?
の中に 今後の Guavaの最新バージョン(12.0)、 FluentIterable という名前のクラスがあります。このクラスは、この種のものに欠けている流暢なAPIを提供します。
FluentIterableを使用すると、次のようなことができるはずです。
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();