2015-03-02 4 views
7

Y a-t-il une convention de dénomination pour les méthodes renvoyant Stream? La seule mention que j'ai trouvée est answer on S.O (dernier paragraphe), mais je ne vois pas sur quoi elle est basée.Attribution d'un nom aux méthodes Java renvoyant des flux

+1

Il est basé sur ce qui est devenu apparent dans le code existant, c'est-à-dire le JRE lui-même et l'exemple de code dans les didacticiels.Il pourrait ne pas être dans un guide de style pour le moment, mais si Stuart Marks reconnaît et recommande ce modèle, il est susceptible d'être un modèle commun bientôt. Btw, je suis arrivé à la même conclusion indépendamment, donc c'est * vraiment * un modèle reconnaissable. – Holger

Répondre

13

Depuis que j'ai écrit ce paragraphe, je me sens obligé de répondre. :-)

Supposons que vous ayez une classe qui représente une agrégation de choses d'un seul type et que vous souhaitiez en renvoyer un Stream à l'appelant.

S'il n'y a aucune ambiguïté quant à ce que vous renvoyez, vous pouvez aussi bien appeler la méthode stream(). Il y a beaucoup de méthodes dans le JDK nommées stream() qui retournent un flux du type évident.

Parfois, ce que vous retournez est une représentation différente de la même chose, ou de différents types de choses, ou peu importe. Dans ce cas, il semble qu'il y ait une convention pour choisir un nom pluriel qui représente le type de choses renvoyées dans le flux.

Pour les voir, regardez dans le Javadoc et cliquez sur le Utilisez le lien dans la barre de navigation supérieure. Cela vous amènera à une page de référence croisée. Recherchez toutes les méthodes qui ont des valeurs de retour du type qui vous intéresse.

Par exemple, voir les pages Utilisez pour Stream, IntStream, LongStream et DoubleStream. Il y a beaucoup de méthodes nommées stream() qui retournent les flux. Mais il y a aussi:

  • java.io.BufferedReader.lines()
  • java.lang.CharSequence.chars()
  • java.lang.CharSequence.codePoints()
  • java.nio.CharBuffer.chars()
  • java.nio.file.File.lines()
  • java.util.Random.ints()
  • java.util.Random.longs()
  • java.util.Random.doubles()
  • java.util.SplittableRandom.ints()
  • java.util.SplittableRandom.longs()
  • java.util.SplittableRandom.doubles()
  • java.util.concurrent.ThreadLocalRandom.ints()
  • java.util.concurrent.ThreadLocalRandom.longs()
  • java.util.concurrent.ThreadLocalRandom.doubles()

Bien sûr, il y a beaucoup de méthodes qui ne sont pas conformes à ce sujet. La classe d'utilitaire de fichier NIO a Files.find(), Files.list() et Files.walk(). Un flux de résultats de la division d'une chaîne est renvoyé par java.util.regex.Pattern.splitAsStream. Je ne pense pas que quiconque aime le suffixe AsStream mais encore une fois, personne ne pouvait penser à quelque chose de mieux. D'un autre côté, une amélioration de JDK 9 proposée pour obtenir un flux de résultats de correspondance regex sera nommée Matcher.results().

+0

Éclairer comme toujours. Merci. – Vitaliy