在我使用数据库的过程中,我注意到我编写查询字符串,在这个字符串中,我必须在列表/数组/集合的where子句中设置一些限制。应该如下所示:
select * from customer
where customer.id in (34, 26, ..., 2);
您可以简化这一过程,将其简化为这样一个问题:您拥有字符串集合,并且希望在一个字符串中创建此字符串的逗号分隔列表。
我到目前为止使用的方法是这样的:
String result = "";
boolean first = true;
for(String string : collectionOfStrings) {
if(first) {
result+=string;
first=false;
} else {
result+=","+string;
}
}
但正如你所见,这是非常丑陋的。乍一看,您无法看到那里发生了什么,特别是当构造的字符串(就像每个SQL查询一样)变得复杂时。
你的(更)优雅的方式是什么?
发布于 2008-10-15 19:05:13
使用Google Guava API的join
方法:
Joiner.on(",").join(collectionOfStrings);
发布于 2008-10-15 18:13:37
我只看了今天做这件事的代码。这是AviewAnew答案的一个变体。
collectionOfStrings = /* source string collection */;
String csList = StringUtils.join(collectionOfStrings.toArray(), ",");
我们使用的StringUtils ( <-- commons.lang 2.x或commons.lang 3.x link )来自Apache Commons。
发布于 2008-10-16 13:10:22
我发现迭代器习惯用法很优雅,因为它有一个对更多元素的测试(为了简洁,省略了null/空测试):
public static String convert(List<String> list) {
String res = "";
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
res += iterator.next() + (iterator.hasNext() ? "," : "");
}
return res;
}
https://stackoverflow.com/questions/205555
复制相似问题