1. Коллекции
Примеры из лекций и входной код для выполнения заданий находится в репозитории https://github.com/AltmanEA/edu-collection.
В задании требуется самостоятельно изучить отдельные элементы библиотеки коллекций. Для этого рекомендуется в среде набрать название элемента и с помощью сочетания клавиш Ctrl-B открыть исходный код этого элемента. В исходном коде в комментариях приведено описание этого элемента, из которого потом генерируется документация. Этого описания должно быть достаточно для понимания того, что и для чего делает этот элемент.
Если описания в документации не достаточно то можно попробовать разобраться с исходным кодом, который доступен для библиотечных функций и классов. Если и исходного кода оказалось недостаточно для понимания какого-либо элемента библиотеки то можно попробовать найти информацию в сети интернет. Однако её следует проверить с помощью экспериментов с кодом, поскольку в интернете встречается много устаревшей или некорректной информации.
-
Операции с коллекциями
- Изучите функцию
mapIndexedи создайте с её помощью коллекциюstudentIndexesc индексами коллекции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} - Изучите описание интерфейса