如何将List<Object>转换为逗号分隔的字符串

33

我正在从数据库调用中获取 Address 对象的列表。

ArrayList<Address> addresses = new ArrayList<>();

每个 Address 都有一个 int addressId 属性。

我正在编写一个更新查询,其中在 IN 子句中发送了整个 Address 对象列表,并且我得到了ibatis的 TypeException。如何将 List<Address> 转换为逗号分隔的字符串,可以发送到更新查询中?

我的更新查询看起来像这样:::

Update tablename set postcode = #{postCode} where id in #{addressID}.

再次考虑这种方法。特别是要了解SQL注入的相关知识。 - Henry
@Henry 把它转换成字符串并在IN子句中发送不会解决问题吗?我不知道如何在更新查询中传递列表.. - user9193174
它会解决这个问题,但会产生一个新的问题(安全漏洞)。 - Henry
@Henry 创建一个新的意味着什么?抱歉,我没听懂。 - user9193174
我不认为在这种情况下可能发生SQL注入。没有任何用户输入可以以任何方式影响addressID字符串的创建,而且addressId字段具有整数类型。 - Kirill Simonov
8个回答

59

使用Java 8可以在一行代码中实现:

String addressID = addresses
           .stream()
           .map(a -> String.valueOf(a.addressId))
           .collect(Collectors.joining(","));

4
一个非 "List<string>" 的例子!谢谢! - granadaCoder
如果“addresses”为空呢? - Johnny

16

要将内容转换为逗号分隔的字符串,请使用类似以下代码:

String commaSeparatedStr = addresses
        .stream()
        .map(String::valueOf)
        .collect(Collectors.joining(","));

3
如果有人需要在Address对象内部使用逗号分隔的变量,请使用映射中的getter .map(c -> String.valueOf(c.getName())) - Roy Ryando

8

String#join 方法可以接受定界符 String 和可迭代元素(在您的情况下是 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"

3

遍历地址对象,检索它们的ID并创建一个字符串。类似这样:

StringBuilder sb = new StringBuilder();

for (Address a: adresses) {
  sb.append(a.getId());
  sb.append(", ");
}

String ids = sb.toString();

2
String.join(", ", addresses) ;

超级简单。超级好。 - chendu

1
所需格式可以使用toString()replaceAll()方法(使用正则表达式)获得。
String addressString = addresses.toString().replaceAll("[ \\[ \\] ]", "");

1
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());

1

整数列表 int - 让Java来处理:

String tmp = addresses.toString();
String csList = tmp.substring(1, tmp.length()-1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接