将列表的元素转换为字符串

Ant*_*nto 10 java string collections list

我想获取存储在列表中的元素的字符串文本List<Car>.toArray()和toString()方法是最好的选择吗?

Rom*_*las 18

另一个想法是使用Apache Commons Lang编写以下代码:

StringUtils.join(myList);
Run Code Online (Sandbox Code Playgroud)

您的兴趣是您还可以提供分隔符,例如:

StringUtils.join(myList, " ; ");
Run Code Online (Sandbox Code Playgroud)


Ada*_*ski 10

提供您不反对遵循约定的字符串输出:

[A, B, C]
Run Code Online (Sandbox Code Playgroud)

...你可以简单地调用ListtoString()方法来获得你的输出(我不知道为什么人们正在使用这种循环主张).覆盖Car的toString()方法以返回对象的人性友好描述也是明智的.

但是,如果您希望将每个元素作为一个元素获取,则String需要一次迭代List一个元素.

  • @Dominik:这是一个公平的观点,但我猜想在99.9%的情况下,人们倾向于使用List的JDK实现,这会产生这种输出风格.我倾向于使用此输出进行调试日志记录,但绝不会将其用于表示级逻辑. (2认同)

Dom*_*nik 8

有一种static toString(Object[])方法java.util.Arrays.使用toArray()List 的结果调用它(如您所建议的)应该完成这项工作.

  • @Adamski:接口List没有为toString()定义合约. (3认同)
  • 为什么不直接在列表上调用toString()? (2认同)

Boz*_*zho 6

是的,但手动操作可以让您获得更多控制权:

// initialize with the exact length
List<String> stringsList = new ArrayList<String>(listOfCars.size()); 
for (Car car : listOfCars) {
    stringsList.add(car.toString());   
}
Run Code Online (Sandbox Code Playgroud)

如果您没有覆盖该toString()方法或者不想覆盖它,则可以使用car.getName()而不是car.toString()(或您喜欢的任何属性组合)


hkb*_*ath 5

您可以使用Java 8 Streams

List<Car> carList = new ArrayList<>();
//Add some elemts to carList
carList.stream()
.map(Car::toString) // maps Car Object to a value returned by toString method
.collect(Collectors.joining(","));
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅JavaDocCollectors.