Drukuj ArrayList


82

Mam ArrayList, który zawiera obiekty Address.

Jak wydrukować wartości tej ArrayList, co oznacza, że ​​drukuję zawartość tablicy, w tym przypadku liczby.

Mogę tylko wydrukować rzeczywisty adres pamięci tablicy za pomocą tego kodu:

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

chcesz, aby lokalizacja adresu była w pamięci?
Paul Nikonowicz

przepraszam, nie rozumiem o co ci chodzi. arraylist przechowuje adres wskazujący na tablicę i chcę wydrukować zawartość tablicy, ale nie wiem, jak się do tego zabrać.
dancooper93

Próbowałem przeformułować pytanie, aby było jaśniejsze.
antony.trupe

Przez adres ma na myśli adres domu. Myślę.
Kuldeep Jain

1
Podaj nam tylko deklarację houseAddresszmiennej i przykładowy kod elementów, które zawiera.
Louis Wasserman,

Odpowiedzi:


112

list.toString () jest wystarczająco dobra.

Interfejs List nie definiuje kontraktu dla toString (), ale klasa bazowa AbstractCollection zapewnia użyteczną implementację dziedziczoną przez ArrayList.


Ten sam wynik jest wypisywany przez System.out.println (lista);
Asha

4
lista jest houseAddress tutaj:Arrays.toString(houseAddress.toArray())
Początkujący

3
AbstractCollection już przesłania, toString()aby wydrukować zawartość swoich elementów. Więc po prostu list.toString()drukuje toString()wszystkie jego elementy. Dotyczy to wszystkich kolekcji.
Hanif

20

Dodaj toString()metodę do swojej addressklasy, a następnie zrób

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

39
To działałoby tylko dla tablicy, a nie listy tablic. Nie można podać houseAddressargumentu for, Arrays.toString()ponieważ nie jest to typ Array.
beckah

moim zdaniem pętla jest możliwa tylko tutaj, jeśli ktoś zna lepszą opcję, udostępnij.
geniushkg

17

Z tego, co rozumiem, próbujesz wydrukować ArrayList z tablicami i jednym ze sposobów wyświetlenia tego byłoby

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

9

ponieważ nie dostarczyłeś niestandardowej implementacji toString()metody, wywołuje ona domyślną, na której ma zostać wydrukowany adres w pamięci dla tego obiektu

rozwiązanie w klasie Address przesłania taką toString()metodę

public class Address {

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

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

teraz, kiedy dzwonisz

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

System.out.print( houseAddress.get(i) )toString()z Addressobiektu zostanie wywołana


7

Możesz to po prostu podać jako:

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

Twój wynik będzie wyglądał [address1, address2, address3]

Dzieje się tak, ponieważ klasa ArrayList lub jej nadklasa miałaby nadpisaną funkcję toString ().

Mam nadzieję że to pomoże.


7

Załóżmy, że masz taką listę numerów

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

jeśli wydrukujesz listę

//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

Czy mówisz, że ArrayListprzechowuje adresy tablic, ponieważ to jest to, co wraca z toStringpołączenia, czy też dlatego, że tak naprawdę przechowujesz?

Jeśli masz ArrayListtablice (np

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

Następnie, aby wydrukować wartości tablicy, które musisz wywołać 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+"  ");
    }
}

Nie różni się to od obecnego kodu PO. Problem pozostaje.
Tom

3

Ponieważ Java 8 , można użyć foreach () metody z iterable interfejsu.
To metoda domyślna. Jako argument przyjmuje obiekt klasy, który implementuje funkcjonalny interfejs Konsument . Możesz zaimplementować Consumer lokalnie na trzy sposoby:

Z klasą anonimową :

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

wyrażenie lambda :

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

lub przy użyciu odniesienia do metody :

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

Ten sposób drukowania działa dla wszystkich implementacji interfejsu Iterable .
Wszystkie dają możliwość zdefiniowania sposobu drukowania elementów, podczas gdy toString () wymusza drukowanie listy w jednym formacie.


3

Umieść houseAddress.get(i)w nawiasach i wywołaj .toString()funkcję: tj. Patrz poniżej

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

@ Panie Goose, nie rozumiem twojego pytania całkiem jasno, co masz na myśli?
21

wywołanie .toString () jest zbędne.
Gabriel Pellegrino

2

Nie jestem pewien, czy zrozumiałem pojęcie adresów (zakładam tutaj houseAddress), ale jeśli szukasz sposobu na wydrukowanie ArrayList, proszę:

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

Najprostszym sposobem wydrukowania ArrayList jest użycie toString

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

Wynik

[111, 112, 113]


2

Możesz użyć Iteratora. Jest to tutaj najprostsza i najmniej kontrowersyjna rzecz. Say houseAddressma wartości typu danychString

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

Uwaga: Możesz nawet użyć do tego ulepszonej pętli for, jak wspomniałem w innej odpowiedzi


1
ps jest najmniej kontrowersyjny, ponieważ nie robisz tutaj żadnych niepotrzebnych konwersji, takich jak konwersja ArrayList do Array, a następnie konwersja na ciąg znaków, aby go wydrukować
Ishan Srivastava

1

Pomogło mi to:

System.out.println(Arrays.toString(codeLangArray.toArray()));

1

jeśli ustawisz @Override public String toString () jako komentarze, uzyskasz takie same wyniki, jak zrobiłeś. Ale jeśli zaimplementujesz metodę toString (), zadziała.

public class 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);
}

}

klasa Adres {prywatny adres int; adres publiczny (int i) {addr = i; }

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

}


1

Możesz nawet użyć ulepszonej pętli for lub iteratora, takiego jak:

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

Możesz go zmienić na dowolny typ danych, houseAddressaby uniknąć niepotrzebnych konwersji


1

JSON

Alternatywnym rozwiązaniem może być przekonwertowanie listy do formatu JSON i wydrukowanie ciągu Json. Zaletą jest dobrze sformatowany i czytelny ciąg znaków bez konieczności implementacji toString(). Dodatkowo działa z każdym innym ObjectlubCollection w locie.

Przykład z użyciem Google Gson :

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

możesz użyć formatu print, jeśli chcesz po prostu wydrukować element na konsoli.

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

0

Zakładając, że houseAddress.get(i)to ArrayListmożna dodać toString()po ArrayList:

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

Ogólny przykład:

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

0

To jest prosty kod dodawania wartości w ArrayList i drukowania wartości 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);
      }
    }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.