我想获取存储在列表中的元素的字符串文本,比如List<Car>
。 toArray()和toString()方法是最好的选择吗?
答案 0 :(得分:18)
另一个想法是使用Apache Commons Lang编写以下代码:
StringUtils.join(myList);
您可以提供分隔符,例如:
StringUtils.join(myList, " ; ");
答案 1 :(得分:10)
假设您不按照约定对象输出字符串:
[A, B, C]
...您可以简单地调用List
的{{1}}方法来获取您的输出(我不确定为什么人们主张使用循环来实现此目的)。覆盖Car的toString()
方法以返回对象的人性友好描述也是明智的。
但是,如果您希望将每个元素作为单个toString()
获取,则需要一次迭代List一个元素。
答案 2 :(得分:8)
static toString(Object[])
方法java.util.Arrays
。使用列表的toArray()
结果调用它(如您所建议的)应该完成这项工作。
答案 3 :(得分:6)
是的,但手动操作可以让您获得更多控制权:
// initialize with the exact length
List<String> stringsList = new ArrayList<String>(listOfCars.size());
for (Car car : listOfCars) {
stringsList.add(car.toString());
}
如果您没有覆盖toString()
方法或者不想覆盖它,则可以使用car.getName()
代替car.toString()
(或您喜欢的任何属性组合)
答案 4 :(得分: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(","));
有关Collectors
的详情,请参阅JavaDoc。
答案 5 :(得分:3)
首先将List(Collection)转换为数组,然后创建每个元素的字符串。
Arrays.toString(myCollection.toArray());
答案 6 :(得分:2)
我不想给hkbharath单独回答,这是一个很好的答案,但我想提供更多使用Java 8流的例子。 Collectors.joining()有一些不同的重载变体。
让我们说他的例子中的代码:
carList.stream()
.map(Car::toString) // maps Car Object to a value returned by toString method
.collect(Collectors.joining(","));
给你这个:福特,本田,别克
然后,如果您不需要分隔符:
carList.stream()
.map(Car::toString) // maps Car Object to a value returned by toString method
.collect(Collectors.joining());
会改为:FordHondaBuick
这是一个扩展示例,展示了如何操作每个字符串,更改分隔符以及添加前缀和后缀:
carList.stream()
.map(Car::toString) // maps Car Object to a value returned by toString method
.map(String::toUpperCase) // Transform to upper case
.collect(Collectors.joining("; ", "[", "]"));
会反过来给你:[福特; HONDA;别克]
答案 7 :(得分:-2)
for (Car car : carsList) { // carsList is the object of List<Car>
System.out.println(car);
}
注意:只有在重写了Car类的toString()方法时,上面才会显示有意义的消息。
e.g
public class Car {
private String carName;
....
....
public String toString() {
return carName;
}
}
应该重写toString()方法,以便以字符串形式返回有关对象的有意义信息。
在您的情况下,我认为有意义的信息将是汽车的所有细节。所以重写toString()方法是最好的方法,而不是使用getCarName()或类似的方法。