2015-03-02 1 views
7

Есть ли соглашение об именах для методов, возвращающих Stream? Единственное упоминание, которое я нашел, это answer on S.O (последний абзац), но я не понимаю, на чем оно основано.Именование методов java, возвращающих потоки

+1

Это основано на том, что стало очевидным в существующем сейчас коде, т. Е. Сам JRE и пример кода в учебниках.Возможно, это не относится ни к одному руководству по стилю, но если Стюарт Маркс признает и рекомендует этот шаблон, он, скорее всего, будет распространенным. Кстати, я пришел к одному и тому же выводу независимо, так что это * действительно * узнаваемый образец. – Holger

ответ

13

Поскольку я написал этот параграф, я вынужден ответить. :-)

Предположим, у вас есть класс, который представляет собой агрегацию вещей одного типа, и вы хотите вернуть Stream из них вызывающему.

Если это абсолютно недвусмысленно относительно того, что вы возвращаете, вы можете также назвать метод stream(). В JDK существует множество методов, называемых stream(), которые возвращают поток очевидного типа.

Иногда то, что вы возвращаете, это разные представления одной и той же вещи или разные вещи или что-то еще. В этом случае, похоже, существует соглашение о выборе множественного существительного, которое представляет тип вещей, возвращаемых в потоке.

Чтобы увидеть их, посмотрите в Javadoc и нажмите Используйте ссылку в верхней панели навигации. Это приведет вас к странице перекрестных ссылок. Посмотрите на все методы, которые имеют возвращаемые значения типа вы заинтересованы в.

Например, см Использование страниц для Stream, IntStream, LongStream и DoubleStream. Существует множество методов с именем stream(), которые возвращают потоки. Но есть также:

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

Конечно, есть много методов, которые не соответствуют этому. Класс полезности файла NIO имеет Files.find(), Files.list() и Files.walk(). Поток результатов от разбиения строки возвращается java.util.regex.Pattern.splitAsStream. Я не думаю, что кому-то нравится суффикс AsStream, но потом снова никто не мог придумать ничего лучшего. С другой стороны, предлагаемое усовершенствование JDK 9 для получения результатов регулярных выражений будет иметь название Matcher.results().

+0

Просветляется как всегда. Благодарю. – Vitaliy