2015-03-02 10 views
7

Gibt es eine Namenskonvention für Methoden, die Stream zurückgeben? Die einzige Erwähnung, die ich fand, ist diese answer on S.O (letzter Absatz), aber ich sehe nicht, worauf es basiert.Benennen von Java-Methoden, die Streams zurückgeben

+1

Es basiert auf dem, was im jetzt existierenden Code, d. H. Der JRE selbst und dem Beispielcode in Tutorials, offensichtlich geworden ist.Es ist vielleicht noch nicht in jedem Styleguide, aber wenn Stuart Marks dieses Muster erkennt und empfiehlt, wird es wahrscheinlich bald ein allgemeines Muster sein. Übrigens kam ich unabhängig voneinander zu demselben Ergebnis, also ist es wirklich ein erkennbares Muster. – Holger

Antwort

13

Seit ich diesen Absatz geschrieben habe, fühle ich mich gezwungen zu antworten. :-)

Angenommen, Sie haben eine Klasse, die eine Ansammlung von Dingen eines einzelnen Typs darstellt, und Sie möchten eine Stream davon an den Aufrufer zurückgeben.

Wenn es völlig eindeutig ist, was Sie zurückgeben, können Sie auch die Methode stream() aufrufen. Es gibt viele Methoden im JDK namens stream(), die einen Stream des offensichtlichen Typs zurückgeben.

Manchmal ist das, was Sie zurückgeben, unterschiedliche Darstellungen derselben Sache oder verschiedener Arten von Dingen oder was auch immer. In diesem Fall scheint es eine Konvention zu geben, ein Pluralnomen zu wählen, das die Art von Dingen darstellt, die in dem Strom zurückgegeben werden.

Um diese zu sehen, schauen Sie im Javadoc und klicken Sie auf Verwenden Sie Link in der oberen Navigationsleiste. Dies führt Sie zu einer Querverweisseite. Geben Sie für alle Methoden, die Rückgabewerte des Typs haben Sie interessiert sind.

Zum Beispiel finden Sie in den Verwenden Seiten für Stream, IntStream, LongStream und DoubleStream. Es gibt viele Methoden mit dem Namen stream(), die Streams zurückgeben. Aber es gibt auch:

  • 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()

Natürlich gibt es viele Methoden, die dies nicht entsprechen. Die NIO-Dateidienstklasse hat Files.find(), Files.list() und Files.walk(). Ein Ergebnisstrom aus der Teilung einer Zeichenfolge wird von java.util.regex.Pattern.splitAsStream zurückgegeben. Ich glaube nicht, dass irgendjemand das AsStream Suffix mag, aber andererseits könnte niemand besser etwas denken. Auf der anderen Seite wird eine vorgeschlagene JDK 9-Erweiterung, um einen Strom von Regex-Übereinstimmungsergebnissen zu erhalten, Matcher.results() genannt.

+0

Erleuchtung wie immer. Vielen Dank. – Vitaliy