Java 番石榴:如何结合过滤和转换?
我有一个字符串集合,我想将它转换为一个字符串集合,所有空字符串或空字符串被删除,所有其他字符串被修剪 我可以分两步完成:Java 番石榴:如何结合过滤和转换?,java,guava,Java,Guava,我有一个字符串集合,我想将它转换为一个字符串集合,所有空字符串或空字符串被删除,所有其他字符串被修剪 我可以分两步完成: final List<String> tokens = Lists.newArrayList(" some ", null, "stuff\t", "", " \nhere"); final Collection<String> filtered = Collections2.filter( Collections2.t
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]
最终列表令牌=
Lists.newArrayList(“some”,null,“stuff\t”,“”,“\nhere”);
最终收集已筛选=
集合2.0过滤器(
Collections2.transform(令牌、新函数(){
//这是StringUtils.stripToEmpty()的替代品
//为什么番石榴没有这样的东西?
@凌驾
公共字符串应用(最终字符串输入){
返回input==null?”:input.trim();
}
}),新谓词(){
@凌驾
公共布尔应用(最终字符串输入){
return!Strings.isNullOrEmpty(输入);
}
});
系统输出打印项次(过滤);
//输出,根据需要:[一些,东西,这里]
但是有没有一种番石榴方法可以将这两个动作组合成一个步骤呢?在即将发布的最新版本(12.0)的番石榴中,会有一个名为。
此类为此类内容提供缺少的fluent API
使用Fluentitable,您应该能够执行以下操作:
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();
final Collection filtered=FluentIterable
.来自(代币)
.transform(新函数(){
@凌驾
公共字符串应用(最终字符串输入){
返回input==null?”:input.trim();
}
})
.filter(新谓词(){
@凌驾
公共布尔应用(最终字符串输入){
return!Strings.isNullOrEmpty(输入);
}
})
.toImmutableList();
正如斯卡夫曼指出的,这是最简单的方法;至于您提到的一些非常常用的函数没有被嵌入的注意事项,为什么不请求字符串
api添加一些静态函数
s和谓词
s以获得类似的合理示例?我发现维修人员反应相当迅速。@Carl好吧,我已经在那里解决了管道中的问题,我不想让他们感到不安。但我可能会这么做,因为最终我想让番石榴代替我的commons/lang和commons/io,这还有很长的路要走。我想你可以过滤,然后转换。因此,不需要在您的transformation@sylvain:显然是的。感谢您,如果您使用的是Java 8,那么不鼓励使用Fluentitable
,而支持Java 8流。非常流畅。很高兴我偶然发现了这个。