番石榴木匠无法添加前缀和后缀



我在 Joiner 中要求能够为元素添加前缀和后缀。

例如

String str[] = {"a", "b", "c"};
Joiner.on(",").prefix("'").suffix("'").join(str);

预期输出为:

'a','b','c'

我们还有其他选择吗?因为番石榴不这样做(或者我不知道)。对于Java 8,有更好的选择吗?

您可以使用

Guava 的List#transform进行转换a --> 'a',然后在转换列表中使用Joiner。 不过,transform仅适用于Iterable对象,不适用于数组。代码仍然足够简洁:

List<String> strList = Lists.newArraylist(str); // where str is your String[]
Joiner.on(',').join(Lists.transform(str, surroundWithSingleQuotes));

其中转换如下所示:

Function<String, String> surroundWithSingleQuotes = new Function<String, String>() {
    public String apply(String string) {
        return "'" + string + "'";
    }
};

有人可能会说这是一种冗长的方法,但我钦佩transform范式提供的灵活性。

编辑(因为现在有Java 8)

在 Java 8 中,所有这些都可以使用 Stream 接口在一行中完成,如下所示:

strList.stream().map(s -> "'" + s + "'").collect(Collectors.joining(","));

更有效的解决方案是

String str[] = {"a", "b", "c"}; // or whatever
if (str.length == 0 ) {
    return "";
}
return "'" + Joiner.on("','").join(str) + "'";

这也比使用函数短(至少没有函数文字;空输入的处理使这个解决方案变得丑陋)。不好的部分是您必须以不太明显的方式在Joiner中包含前缀和后缀并重复它们。这个例子使它更加明显:

return "[" + Joiner.on("], [").join(str) + "]";

要不假思索地把它做好,只需记住["+", "+"]的结果,即[+], [+]并使用加号分隔的部分。

相关内容

  • 没有找到相关文章

最新更新