Guava Joiner无法使用前缀和后缀
我在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 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) + "]";
为了在不考虑的情况下做到正确,只需记住["+", "+"]
,即[+], [+]
并使用加号分隔的部分。
- BigQuery和OAuth2
- 从Oauth2 Google Contacts API获取Userinfo
- 我可以通过编程方式创建Google帐户吗?
- Google安全浏览HTTP POST – 403响应
- 当我尝试初始化GoogleMap对象时,我得到一个NullPointerException
- Google ClientLogin身份validation
- 使用Java通过API写入GoogleSheet
- TokenResponseException:尝试访问Admin SDK Google API时出现401 Unauthorized Exception。
- 如何在我的Java应用程序中使用Google Translate API?