Распечатать ArrayList - PullRequest
       31

Распечатать ArrayList

66 голосов
/ 13 февраля 2012

У меня есть ArrayList, который содержит объекты Address.

Как распечатать значения этого ArrayList, то есть я распечатываю содержимое массива, в данном случае чисел.

Я могу только заставить его распечатать фактический адрес памяти массива с этим кодом:

for(int i = 0; i < houseAddress.size(); i++) {   
    System.out.print(houseAddress.get(i));
}  

Ответы [ 18 ]

88 голосов
/ 24 февраля 2016
Arrays.toString(list.toArray())
17 голосов
/ 13 февраля 2012

Добавьте toString() метод к вашему address классу, затем выполните

System.out.println(Arrays.toString(houseAddress));
9 голосов
/ 09 марта 2017

Насколько я понимаю, вы пытаетесь напечатать ArrayList массивов, и единственный способ отобразить это будет

System.out.println(Arrays.deepToString(list.toArray()));
9 голосов
/ 13 февраля 2012

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

решение в вашем адресеКласс переопределяет toString() метод, подобный этому

public class Address {

int addressNo ; 
....
....
...

protected String toString(){
    return Integer.toString(addressNo);
}

Теперь, когда вы вызываете

houseAddress.get(i)  in the `System.out.print()` method like this

System.out.print( houseAddress.get(i) ), toString() объекта Address будет называться

6 голосов
/ 06 июня 2018

при условии, что у вас есть такой список номеров

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

, если вы распечатаете список

//method 1
// Conventional way of printing arraylist
for (int number : numbers) {
    System.out.print(number);
}

//method 2
// Lambda Expression to print arraylist
numbers.forEach((Integer value) -> System.out.print(value));

//method 3
// Lambda Expression to print arraylist
numbers.forEach(value -> System.out.print(value));


//method 4
// Lambda Expression (method reference) to print arraylist
numbers.forEach(System.out::print);
5 голосов
/ 13 февраля 2012

Вы говорите, что ArrayList хранит адреса массивов, потому что это то, что возвращается из вызова toString, или потому что это на самом деле то, что вы храните?

Если у вас есть ArrayList массивов (например,

int[] arr = {1, 2, 3};
houseAddress.add(arr);

Затем для вывода значений массива необходимо вызвать Arrays.deepToString:

for (int i = 0; i < houseAddress.size(); i++) {
     System.out.println(Arrays.deepToString(houseAddress.get(i)));
}
4 голосов
/ 03 сентября 2015

Вы можете просто указать его как:

System.out.println("Address:" +houseAddress);

Ваш вывод будет выглядеть как [address1, address2, address3]

Это потому, что класс ArrayList или его суперкласс имеют переопределенную функцию toString ().

Надеюсь, это поможет.

4 голосов
/ 28 февраля 2015
public void printList(ArrayList<Address> list){
    for(Address elem : list){
        System.out.println(elem+"  ");
    }
}
3 голосов
/ 18 июня 2013

Поместите houseAddress.get (i) в квадратные скобки и вызовите функцию .toString (): т.е. см. Ниже

for(int i = 0; i < houseAddress.size(); i++) {System.out.print((houseAddress.get(i)).toString());
}  
3 голосов
/ 05 ноября 2016

Поскольку Java 8 , вы можете использовать метод forEach () из Итерируемый интерфейс.
Это метод по умолчанию.В качестве аргумента он принимает объект класса, который реализует функциональный интерфейс Consumer .Вы можете реализовать Consumer локально тремя способами:

С анонимным классом :

houseAddress.forEach(new Consumer<String>() {
    @Override
    public void accept(String s) {
        System.out.println(s);
    }
}); 

лямбда-выражение :

houseAddress.forEach(s -> System.out.println(s));

или с помощью справочника методов :

houseAddress.forEach(System.out::print);

Этот способ печати работает для всех реализаций интерфейса Iterable .
Все они дают вамспособ определения способа печати элементов, тогда как toString () обеспечивает печать списка в одном формате.

...