преобразование элементов списка в строку - PullRequest
10 голосов
/ 23 января 2010

Я хотел бы получить текст строки элементов, хранящихся в списке, скажем, List<Car>. Методы toArray () и toString () будут лучшими вариантами?

Ответы [ 8 ]

18 голосов
/ 24 января 2010

Другая идея состоит в том, чтобы использовать Apache Commons Lang , чтобы написать следующий код:

StringUtils.join(myList);

Интерес в том, что вы также можете указать разделитель, например:

StringUtils.join(myList, " ; ");
10 голосов
/ 24 января 2010

Если вы не возражаете против вывода строки в соответствии с соглашением:

[A, B, C]

... вы можете просто вызвать List метод toString(), чтобы получить ваш вывод (я не уверен, почему люди выступают за использование цикла для этого). Также может быть разумно переопределить метод toString() автомобиля, чтобы вернуть понятное человеку описание объекта.

Однако, если вы хотите получить каждый элемент как отдельный String, вам нужно будет перебирать список по одному элементу за раз.

8 голосов
/ 23 января 2010

Существует метод static toString(Object[]) и java.util.Arrays. Вызов его с результатом toArray() списка (как вы предложили) должен сделать эту работу.

6 голосов
/ 23 января 2010

Да, но выполнение этого вручную дает вам больше контроля:

// 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() (или любую комбинацию свойств, которая вам нравится)

5 голосов
/ 30 марта 2017

Вы можете использовать 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(","));

Подробнее см. JavaDoc о Collectors.

3 голосов
/ 29 марта 2016

Сначала преобразуйте список (коллекцию) в массив и создайте строку каждого элемента.

Arrays.toString(myCollection.toArray());
2 голосов
/ 25 мая 2018

Я не хочу давать отдельный ответ от 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("; ", "[", "]"));

Вместо этого дал бы вам: [FORD; HONDA; BUICK]

0 голосов
/ 23 января 2010
for (Car car : carsList) {  // carsList is the object of List<Car>
    System.out.println(car);
}

Примечание. Выше будет отображаться значимое сообщение, только если вы переопределили метод toString () класса Car.

* 1004 например *

public class Car {

    private String carName;

    ....
    ....

    public String toString() {
        return carName;
    }
}

Метод toString () должен быть переопределен, чтобы возвращать значимую информацию об объекте в виде строки.

В вашем случае, я думаю, что значимой информацией были бы все детали автомобиля. Поэтому переопределение метода toString () является лучшим подходом вместо использования getCarName () или аналогичных методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...