我从DB调用中获取Address
个对象的列表。
ArrayList<Address> addresses = new ArrayList<>();
每个Address
都有int addressId
属性。
我正在编写更新查询,在IN
子句中,我发送了Address
个对象的完整列表,我正在获取ibatis TypeException
。如何将List<Address>
转换为可以发送到更新查询的逗号分隔字符串?
我的更新查询看起来像:::
Update tablename set postcode = #{postCode} where id in #{addressID}.
答案 0 :(得分:11)
使用Java 8,您可以在一行中完成:
String addressID = addresses
.stream()
.map(a -> String.valueOf(a.addressId))
.collect(Collectors.joining(","));
答案 1 :(得分:3)
String#join
,接受分隔符NULL
和String
元素(在您的情况下为Iterable
)
List
答案 2 :(得分:2)
转换为逗号分隔字符串使用类似这样的内容:
String commaSeparatedStr = addresses.stream().map(c -> String.valueOf(c)).collect(Collectors.joining(","));
答案 3 :(得分:1)
可以使用toString()
和replaceAll()
方法(使用常规表达式)获取所需的格式。
String addressString = addresses.toString().replaceAll("[ \\[ \\] ]", "");
答案 4 :(得分:0)
迭代地址对象,检索它们的ID并创建一个String。像这样:
StringBuilder sb = new StringBuilder();
for (Address a: adresses) {
sb.append(a.getId());
sb.append(", ");
}
String ids = sb.toString();
答案 5 :(得分:0)
StringBuilder addressIds = new StringBuilder("");
for(Address address : addresses){
if (addressIds.length() > 1)
addressIds.append(", ");
addressIds.append("'").append(address.id()).append("'");
}
//in this method you can directly send the string in Update tablename + set postcode + where id in <String>.
methodOfUpdateInQuery(addressIds.toString());
答案 6 :(得分:0)
int
的列表-让Java执行:
String tmp = addresses.toString();
String csList = tmp.substring(1, tmp.length()-1);
答案 7 :(得分:0)
String.join(", ", addresses) ;