Друк ArrayList


82

У мене є ArrayList, який містить об’єкти Address.

Як надрукувати значення цього ArrayList, тобто роздруковую вміст масиву, в даному випадку номерів.

Я можу отримати його, щоб роздрукувати фактичну адресу пам'яті масиву за допомогою цього коду:

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

Ви хочете розташування адреси в пам'яті?
Пол Ніконович

вибачте, я не розумію, що ви маєте на увазі. arraylist зберігає адресу, що вказує на масив, і я хочу надрукувати вміст масиву, але я не знаю, як це робити.
dancooper93

Я намагався переформулювати питання, щоб було зрозуміліше.
antony.trupe

Під адресою він має на увазі домашню адресу. Я думаю.
Кулдіп Джейн

1
Будь ласка, просто дайте нам декларацію houseAddressзмінної та деякий зразок коду елементів, які вона містить.
Луїс Вассерман

Відповіді:


112

list.toString () досить хороший.

Список інтерфейсу не визначає контракт для toString (), але базовий клас AbstractCollection забезпечує корисну реалізацію, яка успадковується ArrayList.


Той самий результат виводиться System.out.println (список);
Аша,

4
список - houseAddress тут:Arrays.toString(houseAddress.toArray())
Початковий

3
AbstractCollection вже замінює toString()друк вмісту його елементів. Отже, просто list.toString()друкує toString()всі його елементи. Це справедливо для всіх колекцій.
Ханіф,

20

Додайте toString()метод до свого addressкласу, а потім зробіть

System.out.println(Arrays.toString(houseAddress));

39
Це буде працювати лише для масиву, а не для списку масивів. Ви не можете вказати houseAddressяк аргумент, Arrays.toString()оскільки він не має типу Array.
Бекка

на мій погляд, цикл - це можливий вихід тут, якщо хтось знає кращий варіант, будь ласка, поділіться.
geniushkg

17

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

System.out.println(Arrays.deepToString(list.toArray()));

9

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

рішення у вашому класі Address перевизначає 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об'єкта буде називатися


7

Ви можете просто дати це як:

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

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

Це тому, що клас ArrayList або його суперклас мали б функцію toString () замінену.

Сподіваюся, це допомагає.


7

калію, що у вас є такий номерний номер

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

Ви хочете сказати, що 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
public void printList(ArrayList<Address> list){
    for(Address elem : list){
        System.out.println(elem+"  ");
    }
}

Це не відрізняється від поточного коду OP. Проблема залишається.
Том

3

З Java 8 ви можете використовувати метод forEach () з інтерфейсу Iterable .
Це метод за замовчуванням. В якості аргументу він бере об'єкт класу, який реалізує функціональний інтерфейс 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 () забезпечує виконання списку друку в одному форматі.


3

Вставте houseAddress.get(i)всередину дужок і виклик .toString()функції: тобто Будь ласка, дивіться нижче

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

@ Mr.Goose, я не зрозумів вашого запитання, що ви маєте на увазі?
тижня

виклик .toString () надлишковий.
Габріель Пеллегріно,

2

Я не впевнений, чи зрозумів я поняття адрес (я передбачаю houseAddress тут), але якщо ви шукаєте спосіб a для друку ArrayList, ось:

System.out.println(houseAddress.toString().replaceAll("\\[\\]", ""));

2
 public static void main(String[] args) {
        List<Moyen> list = new ArrayList<Moyen>();
        Moyen m1 = new Moyen();
        m1.setCodification("c1");
        m1.setCapacityManager("Avinash");
        Moyen m2 = new Moyen();
        m2.setCodification("c1");
        m2.setCapacityManager("Avinash");
        Moyen m3 = new Moyen();
        m3.setCodification("c1");
        m3.setCapacityManager("Avinash");

        list.add(m1);
        list.add(m2);
        list.add(m3);
        System.out.println(Arrays.toString(list.toArray()));
    }

2

Найпростіший спосіб надрукувати ArrayList - це використання toString

List<String> a=new ArrayList<>();
    a.add("111");
    a.add("112");
    a.add("113");
    System.out.println(a.toString());

Вихідні дані

[111, 112, 113]


2

Ви можете використовувати ітератор. Тут найпростіше і найменш суперечливе. Скажімо, houseAddressмає значення типу данихString

Iterator<String> iterator = houseAddress.iterator();
while (iterator.hasNext()) {
    out.println(iterator.next());
}

Примітка: Ви навіть можете використовувати для цього розширений цикл for, як я згадував у іншій відповіді


1
ps, це найменш суперечливе, оскільки ви не робите тут ніяких непотрібних перетворень, як перетворення ArrayList в Array, а потім перетворення його в рядок для його друку
Ishan Srivastava


1

якщо ви зробите @Override загальнодоступним рядком toString () як коментарі, ви отримаєте ті самі результати, що і ви. Але якщо ви реалізуєте метод toString (), він спрацює.

публічний клас PrintingComplexArrayList {

public static void main(String[] args) {
    List houseAddress = new ArrayList();
    insertAddress(houseAddress);
    printMe1(houseAddress);
    printMe2(houseAddress);
}

private static void insertAddress(List address)
{
    address.add(new Address(1));
    address.add(new Address(2));
    address.add(new Address(3));
    address.add(new Address(4));
}
private static void printMe1(List address)
{
    for (int i=0; i<address.size(); i++)
        System.out.println(address.get(i));
}

private static void printMe2(List address)
{
    System.out.println(address);
}

}

Адреса класу {private int addr; публічна адреса (int i) {addr = i; }

@Override public String toString()
{
    Integer iAddr = new Integer (addr);
    return iAddr.toString();
}

}


1

Ви навіть можете використовувати розширений цикл for або ітератор, наприклад:

for (String name : houseAddress) {
    System.out.println(name);
}

Ви можете змінити його на будь-який тип даних houseAddress, і це дозволяє уникнути непотрібних перетворень


1

JSON

Альтернативним рішенням може бути перетворення вашого списку у формат JSON та друк Json-String. Перевагою є добре відформатований і читабельний об’єкт-рядок без необхідності реалізації toString(). Додатково це працює для будь-якого іншого Objectабо Collectionна льоту.

Приклад використання Gson від Google :

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

...
public static void printJsonString(Object o) {
    GsonBuilder gsonBuilder = new GsonBuilder();
    /*
     * Some options for GsonBuilder like setting dateformat or pretty printing
     */
    Gson gson = gsonBuilder.create();
    String json= gson.toJson(o);
    System.out.println(json);
}

0

Переконайтеся, що у вас є геттер у класі адрес будинку, а потім використовуйте:

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

1
Ласкаво просимо до Stack Overflow . Будь ласка, перегляньте розділ « Як відповісти» та відредагуйте своє запитання відповідно.
compor

0

Ви можете використовувати формат друку, якщо просто хочете надрукувати елемент на консолі.

for(int i = 0; i < houseAddress.size(); i++) {   
    System.out.printf("%s", houseAddress.get(i));
}  

0

Припускаючи, що houseAddress.get(i)це - ArrayListви можете додати toString()після ArrayList:

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

Загальний приклад:

ArrayList<Double> a = new ArrayList();
a.add(2.);
a.add(32.);
System.out.println(a.toString());
// output
// [2.0, 32.0]

0

Це простий код додавання значення в ArrayList і друк значення ArrayList

public class Samim {

public static void main(String args[]) {
    // Declare list
    List<String> list = new ArrayList<>();

    // Add value in list
    list.add("First Value ArrayPosition=0");
    list.add("Second Value ArrayPosition=1");
    list.add("Third Value ArrayPosition=2");
    list.add("Fourth Value ArrayPosition=3");
    list.add("Fifth Value ArrayPosition=4");
    list.add("Sixth Value ArrayPosition=5");
    list.add("Seventh Value ArrayPosition=6");

    String[] objects1 = list.toArray(new String[0]);

    // Print Position Value
    System.err.println(objects1[2]);

    // Print All Value
    for (String val : objects1) {
        System.out.println(val);
      }
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.