Я намагався перетворити масив 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()RArrayList<Integer><R, A>
Collectors.toList()в цьому випадку повертає ArrayList<Integer>" Можливо, він не поверне ArrayList. ListРеалізація НЕ визначена , так що ви не можете покладатися на те , що реалізація повертається. Як говорить javadoc : " Жодних гарантій щодо типу , змінності, серіалізаційності або безпеки потоку повернених списків немає".
toList()не повертає ArrayListабо List- це повернення a Collector, яке в підсумку створить і поверне a List- також у документації зазначено: "... немає гарантій щодо типу , змінності, серіалізаційності або безпеки потоку поверненого списку; якщо потрібен більше контроль над поверненим Списком, використовуйте toCollection (постачальник) .... "
R- це родовий тип отриманого типу.Aзагальний тип проміжного типу накопичення колектора. Це детальна інформація про те, як працює колектор. Він розділяє і перемагає, також для паралельної обробки, збирає спочатку в проміжні типи.