我有一个字符串集合,我想将其转换为全部为空或为null的字符串集合,并删除所有字符串,并修剪所有其他字符串。
我可以分两步来做:
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]
但是,是否有番石榴方法将两个动作组合为一个步骤?
在 即将发布的 最新版本的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();