Есть ли соглашение об именах для методов, возвращающих Stream? Единственное упоминание, которое я нашел, это answer on S.O (последний абзац), но я не понимаю, на чем оно основано.Именование методов java, возвращающих потоки
ответ
Поскольку я написал этот параграф, я вынужден ответить. :-)
Предположим, у вас есть класс, который представляет собой агрегацию вещей одного типа, и вы хотите вернуть 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()
.
Просветляется как всегда. Благодарю. – Vitaliy
Это основано на том, что стало очевидным в существующем сейчас коде, т. Е. Сам JRE и пример кода в учебниках.Возможно, это не относится ни к одному руководству по стилю, но если Стюарт Маркс признает и рекомендует этот шаблон, он, скорее всего, будет распространенным. Кстати, я пришел к одному и тому же выводу независимо, так что это * действительно * узнаваемый образец. – Holger