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));
}  
dancooper93
źródło
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.

oldo
źródło
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));
Ashwinee K Jha
źródło
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()));
Ben Dworkin
źródło
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

konfucjusz
źródło
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.

Suraj
źródło
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);
Ragulan
źródło
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)));
}
JoshBramlett
źródło
4
public void printList(ArrayList<Address> list){
    for(Address elem : list){
        System.out.println(elem+"  ");
    }
}
Uwielbiam Bisaria
źródło
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.

Michał Szewczyk
źródło
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());
}
21stking
źródło
@ 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("\\[\\]", ""));
Manu
źródło
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()));
    }
Avinash Khadsan
źródło
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]

Rifaquat Siddiqui
źródło
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

Ishan Srivastava
źródło
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()));
Abduhafiz
źródło
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();
}

}

user7194131
źródło
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

Ishan Srivastava
źródło
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);
}
tobsob
źródło
0

Upewnij się, że masz pobierający w klasie adresu domu, a następnie użyj:

for(int i = 0; i < houseAddress.size(); i++) {   
    System.out.print(houseAddress.get(i)**.getAddress()**);
}
gd-ogra
źródło
1
Witamy w Stack Overflow . Zapoznaj się z sekcją Jak odpowiedzieć i odpowiednio zmodyfikuj swoje pytanie.
kompor,
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));
}  
Kenneth Ryan Dy
źródło
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]
JacoSolari
źródło
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);
      }
    }
}
Samim Aktar
źródło