Я намагався перетворити масив int в List, і я взяв незнайомий маршрут використання Java 8 Stream і придумав це
Arrays.stream(arr).boxed().collect(Collectors.toList());
У мене все ще є труднощі повністю зрозуміти цю лінію, в основному,
Чому
Collectors.toList()
в цьому випадку повертається інтерфейсArrayList<Integer>
реалізаціїList
? Чому ніLinkedList<Integer>
чи будь-який інший загальний клас, що відповідаєList
інтерфейсу? Я нічого не можу знайти про це, крім короткої згадки про ArrayList тут , у розділі API Notes.Що означає ліва панель ? Очевидно, це загальний тип повернення ( у моєму коді тут). Я думаю, що це аргумент загального типу методу, але як вони вказані? Я заглянув у doc інтерфейс колектора і не зміг його засвоїти.
Stream.collect()
R
ArrayList<Integer>
<R, A>
Collectors.toList()
в цьому випадку повертає ArrayList<Integer>
" Можливо, він не поверне ArrayList
. List
Реалізація НЕ визначена , так що ви не можете покладатися на те , що реалізація повертається. Як говорить javadoc : " Жодних гарантій щодо типу , змінності, серіалізаційності або безпеки потоку повернених списків немає".
toList()
не повертає ArrayList
або List
- це повернення a Collector
, яке в підсумку створить і поверне a List
- також у документації зазначено: "... немає гарантій щодо типу , змінності, серіалізаційності або безпеки потоку поверненого списку; якщо потрібен більше контроль над поверненим Списком, використовуйте toCollection (постачальник) .... "
R
- це родовий тип отриманого типу.A
загальний тип проміжного типу накопичення колектора. Це детальна інформація про те, як працює колектор. Він розділяє і перемагає, також для паралельної обробки, збирає спочатку в проміжні типи.