我有一个List<String>,我们正在使用Joiner来获得该列表的逗号分隔的表示形式,但现在我们需要做一些改进,我们需要将列表中的值大写。现在的代码是-
String str = Joiner.on(',').skipNulls().join(myValueList);但是现在我需要大写字符串的值,我需要先迭代它来大写,然后传递给Joiner连接,但我不认为这是一个好的方法,因为它会迭代列表两次,一次大写,然后Joiner将迭代连接。
还有没有其他实用的方法可以在一次迭代中做到这一点。
你要怎么用芭乐呢?
发布于 2011-02-18 19:48:00
您可以使用Iterables.transform()
Iterable<String> upperStrings = Iterables.transform(myValueList, new Function<String,String>() {
public String apply(String input) {
// any transformation possible here.
return (input == null) ? null : input.toUpperCase();
}
});
Str str = Joiner.on(',').skipNulls().join(upperStrings);发布于 2011-02-18 20:26:01
关于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));发布于 2011-02-19 03:48:20
下面的内容如何?
Joiner.on(',').skipNulls().join(myValueList).toUpperCase()https://stackoverflow.com/questions/5040886
复制相似问题