114 votes

Y a-t-il un équivalent Java du mot-clé \'yield\' de C#?

Je sais qu'il n'y a pas d'équivalent direct en Java lui-même, mais peut-être un tiers?

C'est vraiment pratique. Actuellement, j'aimerais implémenter un itérateur qui renvoie tous les nœuds dans un arbre, ce qui revient à environ cinq lignes de code avec yield.

6 votes

Je sais, je sais. Mais je pense que savoir plus de langues, c'est plus de puissance. De plus, le développement backend (que je fais) dans l'entreprise pour laquelle je travaille actuellement est fait en Java, donc je ne peux pas vraiment choisir le langage :(

0voto

tigrou Points 881

Voici comment convertir du code avec la logique yield en équivalent Java. Cela peut nécessiter un certain effort mais au moins il n'est pas nécessaire d'utiliser une bibliothèque tierce (néanmoins, cela nécessite le support des lambdas) :

C# :

public IEnumerable Foo()
{
     for (int i = 0; i < 5; i++)
     { 
          yield return i;
     }
}

Java :

public static Iterable foo() {
    return () -> new Iterator<>() {
        Integer counter = 0;

        @Override
        public boolean hasNext() {
            return counter < 5;
        }

        @Override
        public Integer next() {
            return counter++;
        }
    };
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X