关于Joachim Sauer的答案:
如果您将函数移动到可以重用它的地方,则可以使其不那么冗长,在Guava中,典型的情况是使用枚举:
public enum StringTransformations implements Function<String, String>{
LOWERCASE{
@Override
protected String process(final String input){
return input.toLowerCase();
}
},
UPPERCASE{
@Override
protected String process(final String input){
return input.toUpperCase();
}
}
// possibly more transformations here
;
@Override
public String apply(final String input){
return input == null ? null : process(input);
}
protected abstract String process(String input);
}
现在客户端代码如下所示:
String str =
Joiner
.on(',')
.skipNulls()
.join(
Iterables.transform(myValueList,
StringTransformations.UPPERCASE));
我认为这更具可读性。
当然,如果您为 Joiner 引入一个常量,它会更好(在内存使用和性能方面):
private static final Joiner COMMA_JOINER = Joiner.on(',').skipNulls();
// ...
String str = COMMA_JOINER.join(
Iterables.transform(myValueList,
StringTransformations.UPPERCASE));