Comment puis-je créer un flux qui crée un certain nombre d'éléments basé sur une méthode génératrice personnalisée ()?
La question est différente de celle qui se réfère. strong> Le résultat final est un flux , donc je pouvais (simplistes) utiliser un ".forach (system.out :: println)". p> Un exemple serait: flux.generate (myGenerateMethod) .foSeach (System.out :: println) ; p> ou un exemple simpliste serait: p> mise à jour et solution forte>: renvoyé souvent à des réponses. Flux. Alors la réouverture était meilleure. P>
3 Réponses :
Vous avez répondu à votre propre question. Votre extrait est exactement comment vous le feriez. Notez que Vous pouvez ensuite utiliser flux.generate (Lambda) code> ne fonctionne que pour les flux sans fin (vous ne pouvez pas marquer que votre flux est terminé), pourquoi le Javadoc de
Stream.generate code> commence par Le texte: "Retourne un Infinite Strong> séquentiel ...".
limiter code> pour limiter ceci. Par exemple: P>
class StringGenerator extends AbstractList<String> {
private final int size;
public StringGenerator(int size) { this.size = size; }
public int size() { return size; }
public String get(int idx) { return "String-" + idx; }
}
...
new StringGenerator(5).stream().forEach(System.out::println);
flux.generate () code> crée un flux non ordonné i> qui a des conséquences sur ce que vous pouvez attendre de
limite (...) code> ou
primé quant à compte code>. Bien que les constructions montrées dans cette réponse fournissent généralement le résultat prévu pour les flux séquentiels, les flux peuvent entraîner de grandes surprises avec des flux parallèles.
Le moyen plus fonctionnel d'écrire est le suivant:
IntStream.iterate(0, i -> i < 5, i -> i + 1) .mapToObj(i -> "String-" + i) .forEach(System.out::println);
Merci. Le flux.Étathere (I, C, N) est Java 9 et plus. J'ai peur de ne pas pouvoir l'utiliser.
INTREAM.RANGE (0, 5) .Maptoobj (I -> "String-" + i) .poreseach (System.out :: println); code> n'a pas besoin de Java 9 et est bien plus efficace que
itérer code>.
@Holger " Le problème est que je ne sais pas combien d'articles il y aura. La limite est donc très incertaine. Pour la simplicité, j'ai écrit j'ai besoin de 5 articles i>"
Il n'y a aucun problème si vous voulez obtenir un résultat incertain, par exemple. Intream.Range (0, ThreadLocalrandom.Current (). Nextint (20)) ... Code>. Sérieusement, il ne sert à rien d'essayer de deviner la signification d'un commentaire désormais supprimé d'allusion à l'existence d'une autre exigence (que le prédicat mis en œuvre via Lambda expression pourrait également être incapable de remplir). L'un ou l'autre, le questionneur dit clairement ce qui est nécessaire ou doit vivre avec des réponses qui n'attaquent que ce qui a été dit (et à cet égard, la question aurait dû être maintenue fermée, car les doublons ont les mêmes réponses que celle-ci).
Merci, développeurs !! strong> Vous m'avez inspiré à trouver la solution. Merci beaucoup! strong> Mon problème était un peu complexe et simplifie laisse à une question trop simplifiée. P> Comme nous pouvons lire les nombreuses solutions, elle ressemble à Java et à des flux est amusant à résoudre! p> expérimenter avec de nombreuses réponses, celle-ci fonctionne. Il donne une approche assez facile d'obtenir un flux qui peut facilement être contrôlé fort>. Pas de double vérification des critères. J'ai aimé ces réponses Anyxxx () donnant une idée! P> merci, contributeurs, encore une fois! Strong> p> p> p> P> P>
Peu importe. Surprends-moi.
Aussi, celui-ci: Stackoverflow.com/Questtions/22630750/...
Voir aussi Comment les flux s'arrêtent-ils? .
@Andrewtobilko La solution Sclaiterator est exactement la même que celle mentionnée dans la réponse ici sauf moins générique. Donc, omettant de voir pourquoi cela aurait dû être rouvert
Encore une fois, merci beaucoup de m'avoir mentionné dans toutes sortes d'instructions. Par sur simplifiant ma question, on pourrait en conclure que d'autres réponses correspondaient à bien-être. MERCI.