2015-03-02 19 views
7

Esiste una convenzione di denominazione per i metodi che restituiscono Stream? L'unica menzione che ho trovato è questo answer on S.O (ultimo paragrafo), ma non vedo su cosa si basa.Denominazione dei metodi java che restituiscono i flussi

+1

È basato su ciò che è diventato evidente nel codice ora esistente, cioè lo stesso JRE e il codice di esempio nei tutorial.Potrebbe non essere ancora in una guida di stile, ma se Stuart Marks riconosce e raccomanda quel modello, è probabile che presto sarà un modello comune. A proposito, sono arrivato alla stessa conclusione in modo indipendente, quindi è * davvero * un modello riconoscibile. – Holger

risposta

13

Da quando ho scritto quel paragrafo mi sento in dovere di rispondere. :-)

Supponiamo di disporre di una classe che rappresenta un'aggregazione di elementi di un singolo tipo e di restituire uno Stream al chiamante.

Se è totalmente inequivocabile su ciò che si sta restituendo, si potrebbe anche chiamare il metodo stream(). Esistono molti metodi nel JDK denominato stream() che restituiscono un flusso del tipo ovvio.

A volte quello che stai restituendo è rappresentazioni diverse della stessa cosa, o diversi tipi di cose, o qualsiasi altra cosa. In quel caso sembra esserci una convenzione per scegliere un sostantivo plurale che rappresenta il tipo di cose che vengono restituite nel flusso.

Per vedere questi, cercare in Javadoc e fare clic sul collegamento Utilizzare nella barra di navigazione superiore. Questo ti porterà a una pagina di riferimento incrociato. Cercare tutti i metodi che hanno valori di ritorno del tipo che ti interessa.

Ad esempio, vedere i Usa pagine per Stream, IntStream, LongStream e DoubleStream. Esistono molti metodi denominati stream() che restituiscono i flussi. Ma ci sono anche:

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

Naturalmente, ci sono un sacco di metodi che non sono conformi alla presente. La classe di utilità file NIO ha Files.find(), Files.list() e Files.walk(). Un flusso di risultati dalla suddivisione di una stringa viene restituito da java.util.regex.Pattern.splitAsStream. Non credo che a nessuno piaccia il suffisso AsStream ma, ancora una volta, nessuno potrebbe pensare a qualcosa di meglio. D'altra parte, un miglioramento proposto di JDK 9 per ottenere un flusso di risultati di corrispondenza regolare è denominato Matcher.results().

+0

Illuminante come sempre. Grazie. – Vitaliy