Imprimer La Liste De Tableaux
J'ai une ArrayList qui contient des objets d'adresse.
Comment puis-je imprimer les valeurs de cette ArrayList, ce qui signifie que j'imprime le contenu du Tableau, dans ce cas les nombres.
Je ne peux l'obtenir que pour imprimer l'adresse mémoire réelle du tableau avec ce code:
for(int i = 0; i < houseAddress.size(); i++) {
System.out.print(houseAddress.get(i));
}
16 answers
Arrays.toString(list.toArray())
Ajoutez la méthode toString()
à votre classe address
puis faites
System.out.println(Arrays.toString(houseAddress));
Puisque vous n'avez pas fourni d'implémentation personnalisée pour la méthode toString()
, elle appelle la valeur par défaut sur laquelle va imprimer l'adresse en mémoire pour cet objet
Solution
dans votre classe d'adresse, remplacez la méthode toString()
comme ceci
public class Address {
int addressNo ;
....
....
...
protected String toString(){
return Integer.toString(addressNo);
}
Maintenant, quand vous appelez
houseAddress.get(i) in the `System.out.print()` method like this
System.out.print( houseAddress.get(i) )
le toString()
de la Address
objet sera appelé
D'après ce que je comprends, vous essayez d'imprimer une ArrayList de tableaux et la seule façon d'afficher ce serait
System.out.println(Arrays.deepToString(list.toArray()));
Dites-vous que ArrayList
stocke des adresses de tableaux parce que c'est ce qui revient de l'appel toString
, ou parce que c'est en fait ce que vous stockez?
Si vous avez un ArrayList
de tableaux (par exemple,
int[] arr = {1, 2, 3};
houseAddress.add(arr);
Ensuite, pour imprimer les valeurs du tableau, vous devez appeler Arrays.deepToString
:
for (int i = 0; i < houseAddress.size(); i++) {
System.out.println(Arrays.deepToString(houseAddress.get(i)));
}
public void printList(ArrayList<Address> list){
for(Address elem : list){
System.out.println(elem+" ");
}
}
Vous pouvez simplement le donner comme:
System.out.println("Address:" +houseAddress);
Votre sortie ressemblera [address1, address2, address3]
C'est parce que la classe ArrayList ou sa superclasse aurait une fonction toString() remplacée.
J'espère que cela aide.
Mettre houseAddress.obtenez (i) entre parenthèses et appelez .Fonction toString (): c'est-à-dire veuillez voir ci-dessous
for(int i = 0; i < houseAddress.size(); i++) {System.out.print((houseAddress.get(i)).toString());
}
Je ne sais pas si j'ai compris la notion d'adresses (je suppose que houseAddress ici), mais si vous cherchez un moyen d'imprimer la liste de tableaux, voici:
System.out.println(houseAddress.toString().replaceAll("\\[\\]", ""));
Cela m'a aidé:
System.out.println(Arrays.toString(codeLangArray.toArray()));
Depuis Java 8, vous pouvez utiliser forEach() méthode de Itérable interface.
C'est une méthode par défaut. Comme argument, il prend un objet de la classe qui implémente l'interface fonctionnelle Consommateur. Vous pouvez implémenter Consumer localement de trois manières:
Avec classe annononyme :
houseAddress.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
Expression lambda :
houseAddress.forEach(s -> System.out.println(s));
Ou en utilisant référence de méthode :
houseAddress.forEach(System.out::print);
Cette façon d'imprimer fonctionne pour tous implémentations de l'interface Itérable .
Tous, vous donne la façon de définir comment les éléments seront imprimés, tandis que toString() applique la liste d'impression dans un format.
Assium que vous avez une liste de nombres comme ça
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
Si vous imprimez la liste
//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);
Vous pouvez utiliser un itérateur. C'est la chose la plus simple et la moins controversée à faire ici. Dire houseAddress
a des valeurs de type de données String
Iterator<String> iterator = houseAddress.iterator();
while (iterator.hasNext()) {
out.println(iterator.next());
}
Remarque: Vous pouvez même utiliser une boucle for améliorée pour cela comme mentionné par moi dans une autre réponse
Vous pouvez même utiliser une boucle for améliorée ou un itérateur comme
for (String name : houseAddress) {
out.println(name);
}
Vous pouvez le changer en n'importe quel type de données houseAddress et cela évite les conversions unnecesarry
Si vous rendez la chaîne publique @ Override toString () en tant que commentaires, vous aurez les mêmes résultats que vous. Mais si vous implémentez votre méthode toString (), cela fonctionnera.
Classe publique 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);
}
}
Adresse de classe{ privé int addr; adresse publique (int i) { addr = i; }
@Override public String toString()
{
Integer iAddr = new Integer (addr);
return iAddr.toString();
}
}
Assurez-vous d'avoir un getter dans la classe d'adresse interne, puis utilisez:
for(int i = 0; i < houseAddress.size(); i++) {
System.out.print(houseAddress.get(i)**.getAddress()**);
}