Какой шаблон преобразования toArray лучше всего использовать? - PullRequest
1 голос
/ 28 октября 2019

У меня был следующий фрагмент кода, который IntelliJ предложил изменить:

String[] normalizedNames = rawToNormalized.values().stream().toArray(String[]::new);

на

String[] normalizedAliases = rawToNormalized.values().toArray(new String[0]);

Пост Алексея Шипилёва (https://shipilev.net/blog/2016/arrays-wisdom-ancients/) предложил:

toArray (новый T [0]) кажется более быстрым, безопасным и более чистым по контракту, и поэтому должен быть выбором по умолчанию сейчас. "

Может кто-нибудь уточнить, как именно toArray(new String[0]) отличается от toArray(String[]::new) переходом из потока и использованием toArray без Collector.

Может ли toArray(new String[0]) все еще использоваться в потоке? Будет ли он по-прежнему более производительным / лучшим выбором?

1 Ответ

1 голос
/ 28 октября 2019

Я бы следовал за intelliJ в качестве одной простой причины:

Почему вы преобразуете свой список в поток для создания массива. С другой стороны, вы можете напрямую преобразовать этот список в массив.

Может кто-нибудь уточнить, чем именно toArray (new String [0]) отличается от toArray (String [] :: new) и еслиtoArray (новая строка [0]) все еще более производительный / лучший выбор?

Идея предупреждения intelliJ заключается в использовании потока перед toArray, а не в использовании метода toArray

...