首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以装饰芭乐的Joiner类吗?

我可以装饰芭乐的Joiner类吗?
EN

Stack Overflow用户
提问于 2011-02-18 19:44:32
回答 3查看 4K关注 0票数 13

我有一个List<String>,我们正在使用Joiner来获得该列表的逗号分隔的表示形式,但现在我们需要做一些改进,我们需要将列表中的值大写。现在的代码是-

代码语言:javascript
复制
String str = Joiner.on(',').skipNulls().join(myValueList);

但是现在我需要大写字符串的值,我需要先迭代它来大写,然后传递给Joiner连接,但我不认为这是一个好的方法,因为它会迭代列表两次,一次大写,然后Joiner将迭代连接。

还有没有其他实用的方法可以在一次迭代中做到这一点。

你要怎么用芭乐呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-18 19:48:00

您可以使用Iterables.transform()

代码语言:javascript
复制
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);
票数 21
EN

Stack Overflow用户

发布于 2011-02-18 20:26:01

关于Joachim Sauer的回答:

如果您将函数移动到一个可以重用的地方,它可以变得更简单,在Guava中,典型的场景是使用枚举:

代码语言:javascript
复制
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);

}

现在,客户端代码如下所示:

代码语言:javascript
复制
String str =
    Joiner
        .on(',')
        .skipNulls()
        .join(
            Iterables.transform(myValueList,
                StringTransformations.UPPERCASE));

我认为它更具可读性。

当然,如果你为你的Joiner引入一个常量,它会更好(在内存使用和性能方面):

代码语言:javascript
复制
private static final Joiner COMMA_JOINER = Joiner.on(',').skipNulls();

// ...

String str = COMMA_JOINER.join(
            Iterables.transform(myValueList,
                StringTransformations.UPPERCASE));
票数 15
EN

Stack Overflow用户

发布于 2011-02-19 03:48:20

下面的内容如何?

代码语言:javascript
复制
Joiner.on(',').skipNulls().join(myValueList).toUpperCase()
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5040886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档