我从数据库调用中获取
Address
对象列表。
ArrayList<Address> addresses = new ArrayList<>();
每个
Address
都有一个 int addressId
属性。
我正在编写一个更新查询,在
IN
子句中,我发送了整个 Address
对象列表,并且我得到了 ibatis TypeException
。如何将 List<Address>
转换为可以发送到更新查询的逗号分隔字符串?
我的更新查询看起来像:::
Update tablename set postcode = #{postCode} where id in #{addressID}.
使用 Java 8,您可以一行完成:
String addressID = addresses
.stream()
.map(a -> String.valueOf(a.addressId))
.collect(Collectors.joining(","));
要转换为逗号分隔的字符串,请使用以下内容:
String commaSeparatedStr = addresses
.stream()
.map(String::valueOf)
.collect(Collectors.joining(","));
String#join
,它接受分隔符 String
和 Iterable
元素(在您的情况下是 List
)
List<String> strings = new LinkedList<>();
strings.add("Java");
strings.add("is");
strings.add("cool");
String message = String.join(",", strings); //pass delimiter and List
//message returned is: "Java,is,cool"
迭代地址对象,检索它们的 ID 并创建一个字符串。像这样的东西:
StringBuilder sb = new StringBuilder();
for (Address a: adresses) {
sb.append(a.getId());
sb.append(", ");
}
String ids = sb.toString();
String.join(", ", addresses) ;
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());
可以使用
toString()
和 replaceAll()
方法(使用正则表达式)获得所需的格式。
String addressString = addresses.toString().replaceAll("[ \\[ \\] ]", "");
int
列表 - 让 Java 来做:
String tmp = addresses.toString();
String csList = tmp.substring(1, tmp.length()-1);
6 月 21 日更新:
使用下面的代码片段可用于生成逗号分隔的字符串
String finalString = list.map((item) => item).join(', ');