0
votes

Java itère directement via un tableau au lieu d'une variable de tableau

Dans certains langages, Python, par exemple, on pourrait parcourir directement un tableau:

for (int i : [1, 2, 3, 4]) {
    System.out.println(i);
}

Je sais que Java peut parcourir une variable de pour (type var: var2) , alors est-il possible de sauter la variable et d'itérer directement un tableau? tels que:

for i in [1, 2, 3, 4]:
    print(i)


9 commentaires

Que doit être [1, 2, 3, 4] ? Il n'y a pas de littéraux de liste en Java.


pour (int i: new int [] {1, 2, 3, 4})


@LutzHorn Un tableau. Dans ce cas, un tableau d'entiers. J'utilise [1, 2, 3, 4] juste comme une démo.


Vous savez à quoi ressemble un tableau en Java? Voulez-vous savoir comment un tableau est construit ou s'il existe un littéral de liste en Java comme il y en a en Python?


@JacobG. Je vois, ça a du sens, merci


@LutzHorn Je suppose que vous voulez dire { et [


Je ne comprends pas très bien. La question est de savoir ce que vous voulez dire. Quelle est ta question?


@LutzHorn Jocob l'a résolu, je veux parcourir un tableau sans avoir à créer de variable.


Vous êtes en train de créer un tableau si vous suivez le commentaire de Jacab. Vous ne l'attribuez simplement pas à un nom. Considérez une méthode qui renvoie le tableau. Vous pouvez mettre l'appel à cette méthode dans for (int i: theMethod ()) .


3 Réponses :


2
votes

Je veux parcourir un tableau sans avoir à créer un variable.

Vous devez changer la boucle comme suit:

for (int i : new int[] {1, 2, 3, 4}) {
    // do something (4 iterations)
}

Crédit: Jacob G.


0 commentaires

2
votes

Si vous vraiment voulez éviter d'utiliser la syntaxe entre crochets, vous pouvez également faire:

Arrays.asList(1,2,3,4).forEach(System.out::println);

Ce qui fera effectivement la même chose que la création d'un Array , mais à la place, vous itérez sur une List de taille fixe .

Remarque: Cette réponse est principalement juste pour la connaissance et ne devrait pas faire cela et préférez utiliser new int [] {} plutôt que d'importer la bibliothèque Arrays et de mettre les valeurs en une List inutilement. p>

La manière la plus traditionnelle de voir asList () utilisée serait similaire à:

for (int i : Arrays.asList(1,2,3,4)) {
    System.out.println(i);
}


3 commentaires

Que sa taille soit fixe n'a pas d'importance, car vous ne pourriez rien faire pour changer sa taille même si ce n'était pas le cas (par exemple for (int i: new ArrayList <> (Arrays.asList (1,2,3, 4))) {. Notez également qu'il s'agit d'encadrer les valeurs, uniquement pour les décompresser immédiatement.


@Andy Turner Je ne recommande pas de le faire de cette façon, je le mets simplement comme alternative s'il insiste vraiment pour itérer d'une manière qui ressemble à Python. C'est bien d'apprendre que des alternatives existent même si elles ne sont pas bonnes, à mon avis.


@Andy Turner fera l'affaire.



1
votes

Vous pourriez bien sûr créer l'utilitaire suivant:

IntStream.rangeClosed(1, 4)

Et puis importer statique cette méthode, en utilisant import static ArrayUtils.of code>. Vous avez maintenant une expression assez courte:

for (int i = 1; i <= 4; i++) { ... }

Je ne ferais pas cela dans un scénario réel. J'écrirais plutôt un vieux skool

for (int i : of(1, 2, 3, 4)) { ... }

ou peut-être

class ArrayUtils {
    static int[] of(int... array) {
        return array;
    }
}


0 commentaires