Guava Joiner无法使用前缀和后缀

我在Joiner中要求能够使用前缀和后缀元素。

例如

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

预期产出将是:

 'a','b','c' 

我们有替代方案吗? 因为番石榴不这样做(或者我不知道)。 有了java 8还有更好的选择吗?

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

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

转型如下:

 Function surroundWithSingleQuotes = new Function() { 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) + "]"; 

为了在不考虑的情况下做到正确,只需记住["+", "+"] ,即[+], [+]并使用加号分隔的部分。