Java 番石榴木匠不';我没有前缀和后缀的能力

Java 番石榴木匠不';我没有前缀和后缀的能力,java,google-api,guava,Java,Google Api,Guava,我在Joiner中要求能够为元素添加前缀和后缀 比如说 String str[] = {"a", "b", "c"}; Joiner.on(",").prefix("'").suffix("'").join(str); 预期产出将是: 'a','b','c' 我们有别的选择吗?因为番石榴没有这样做(或者我不知道)。使用java 8有更好的选择吗?您可以使用Guava的列表#transform将转换a-->a',然后在转换列表上使用Joiner变换仅适用于Iterable对象,但不适用于数组

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

比如说

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

预期产出将是:

'a','b','c'

我们有别的选择吗?因为番石榴没有这样做(或者我不知道)。使用java 8有更好的选择吗?

您可以使用Guava的
列表#transform
将转换
a-->a'
,然后在转换列表上使用
Joiner
<代码>变换仅适用于
Iterable
对象,但不适用于数组。代码仍然足够简洁:

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

一个更有效的解决方案是

String str[] = {"a", "b", "c"}; // or whatever
if (str.length == 0 ) {
    return "";
}
return "'" + Joiner.on("','").join(str) + "'";
这也比使用函数要短(至少没有函数文本;处理空输入会使此解决方案难看)。糟糕的是,您必须以一种不太明显的方式将前缀和后缀包含在
Joiner
中并重复它们。这个例子使它更加明显:

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

要想不经思考就把它做好,只需记住
[“+”,“+”]
的结果,即
[+],[+]
,并使用加号分隔的部分。

这种方法会很好地工作,除非你有空数组加入。所以我们可能需要处理数组是否为空的问题,不要加入它们。我只是加了一句,我喜欢。公认的答案是不正确的,因为它不是一个真正的装饰师;例如,如果您希望根据某些条件使用不同的周围字符串,transform()方法将更直接地接受此答案。@MohdAdnan:如果您从数组而不是列表开始,则可以直接使用
Arrays.stream(str_array)
,而不是先将其转换为列表。其余的
map
collect
步骤保持不变。
String str[] = {"a", "b", "c"}; // or whatever
if (str.length == 0 ) {
    return "";
}
return "'" + Joiner.on("','").join(str) + "'";
return "[" + Joiner.on("], [").join(str) + "]";