1. Коллекции
Примеры из лекций и входной код для выполнения заданий находится в репозитории https://github.com/AltmanEA/edu-collection.
В задании требуется самостоятельно изучить отдельные элементы библиотеки коллекций. Для этого рекомендуется в среде набрать название элемента и с помощью сочетания клавиш Ctrl-B
открыть исходный код этого элемента. В исходном коде в комментариях приведено описание этого элемента, из которого потом генерируется документация. Этого описания должно быть достаточно для понимания того, что и для чего делает этот элемент.
Если описания в документации не достаточно то можно попробовать разобраться с исходным кодом, который доступен для библиотечных функций и классов. Если и исходного кода оказалось недостаточно для понимания какого-либо элемента библиотеки то можно попробовать найти информацию в сети интернет. Однако её следует проверить с помощью экспериментов с кодом, поскольку в интернете встречается много устаревшей или некорректной информации.
-
Операции с коллекциями
- Изучите функцию
mapIndexed
и создайте с её помощью коллекциюstudentIndexes
c индексами коллекцииstudents
. - Изучите функцию
zip
и создайте с её помощью из коллекцийstudents
иstudentIndexes
коллекциюstudentWithIndexes
изPair<index, student>
. - Изучите функцию
joinToString
и создайте с её помощью из коллекцииstudentWithIndexes
строкуstudentsString
содержащую перечисленные через запятую пары коллекции. Элементы каждой пары должны выводиться через дефис.
После вывода на печать результатов предыдущих пунктов должно получиться примерно следующее:
[0, 1, 2, 3, 4, 5, 6] [(0, Sheldon), (1, Leonard), (2, Howard), (3, Raj), (4, Penny), (5, Amy), (6, Bernadette)] 0 - Sheldon, 1 - Leonard, 2 - Howard, 3 - Raj, 4 - Penny, 5 - Amy, 6 - Bernadette
- Изучите функцию
-
Виды коллекций
- Изучите исходный код функций
maxBy
иcount
классаIterable
. На их основе создайте функциюfun <T> Iterable<T>.countBy(value: Int, selector: (T) -> Int): Int
, которая бы подсчитывала число элементов коллекции для которых значениеselector
было бы равноvalue
. - Из коллекции
grades
с использованием функцииmapTo
создайте множество (Set) оценок, которые получили студенты. - Изучите функцию
associate
классаIterable
. С помощью нее и созданной в первом пункте функцииcountBy
создайте карту (Map), ключом в которой является оценка, а значение – количество студентов, которые получили эту оценку. - Используя подсказку среды замените функцию
associate
наassociateWith
. Изучите функциюassociateWith
.
После вывода на печать результатов последнего пункта должно получиться примерно следующее:
{3=1, 4=2, 5=1}
- Изучите исходный код функций
-
Реализация коллекций
- Изучите описание интерфейса
Deque
. Разберитесь, как с помощью него можно реализовать стек LIFO, в частности, выполнять операции «поместить в стек» и «взять из стека». - Создайте коллекцию тип
Deque
на основеLinkedList
поместив туда первых трех студентов (используйте при этом функциюsubList
). - Выполните следующие действия над стеком, распечатывая состояние стека до и после операции и результат самой операции:
- Поместите в стек студента с индексом 4.
- Возьмите элемент с вершины стека.
- Изучите функцию
merge
классаTreeMap
. Создайте с помощью этой функции карту в которой является оценка, а значение – список студентов через запятую, которые получили эту оценку. Выведите результат на печать.
Результат выполнения последних пунктов должен быть примерно такой:
[Sheldon, Leonard, Howard] kotlin.Unit [Penny, Sheldon, Leonard, Howard] Penny [Sheldon, Leonard, Howard] {3=Raj, 4=Leonard, Howard, 5=Sheldon}
- Изучите описание интерфейса