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

时间:2010-01-23 19:06:58

标签: java string list collections

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

8 个答案:

答案 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()或类似的方法。