Работа со списками данных в Kotlin #
Документация #
- Официальная документация на язык программирования Kotlin
- Kotlin collections List
- My favorite examples of functional programming in Kotlin
- Kotlin Standard Library Safari Series’ Articles
Задача № 1: фильтрация коллекции #
Входные данные: последовательность целых чисел. Для формирования изначального списка данных можно воспользоваться инициализацией из исходного кода, без необходимости считывать их из внешних по отношению к приложению источникам.
val numbers = listOf(1, 55, 25, 32, 2, 67, 31, 33, 11, 25, 66, 81, 97, 43, 46, 81)- Найти нечётные числа данной последовательности.
- Найти числа, которые не делятся без остатка на 3.
- Найти числа, которые без остатка делятся на свой порядковый номер.
Поставленные задачи необходимо решить следующими способами:
- С использованием цикла for.
- С использованием функции forEach.
- С использованием функции filter,filter.
- С использованием функции forEachIndexed.
- С использованием функции filterIndexed.
Задача № 2: преобразование коллекции #
Входные данные: последовательность прямоугольников.
data class Rectangle(val height: Int, val width: Int) {
    val perimeter: Int
        get() = height * 2 + width * 2
    val area: Int
        get() = height * width
}
val rectangles = listOf(
    Rectangle(12, 1),
    Rectangle(4, 6),
    Rectangle(5, 15),
    Rectangle(7, 32),
    Rectangle(45, 32),
    Rectangle(10, 12),
    Rectangle(3, 9),
)Для данной последовательности прямоугольников вычислите:
- Список периметров данных прямоугольников.
- Список площадей данных прямоугольников.
- Список полупериметров прямоугольников. Для его вычисления используйте свойства высоты и ширины.
- Список диагоналей прямоугольников. Вычисление диагонали должно происходить в рамках обхода списка.
Поставленные задачи необходимо решить следующими способами:
- С использованием цикла for.
- С использованием функции forEach.
- С использованием функции forEachIndexed.
- С использованием функции map.
- С использованием функции mapIndexed.
Задача № 3: вычисление статистических данных о коллекции #
Входные данные: список строк.
val strings = listOf(
    "Apple",
    "Orange",
    "Peach",
    "Banana",
    "Tangerine",
    "Grapefruit",
    "Kiwi",
)Для данной последовательности строк вычислите:
- Начинаются ли все строки с заглавной буквы?
- Есть ли среди строк строка длины 5?
- Во всех ли строках встречается 2 гласные буквы?
- Отсутствуют ли в строках русские буквы?
Поставленные задачи необходимо решить следующими способами:
- С использованием цикла for.
- С использованием функции forEach.
- С использованием функции all.
- С использованием функции any.
- С использованием функции none.
Задача № 4: применение полученных знаний #
Решите следующие задачи. Входные данные для данных задач можно формировать в прямо в исходном коде, без получения от пользователя.
- Определить, сколько раз в последовательности из целых чисел меняется знак, а также номера позиций, в которых происходит смена знака.
- Напечатать те элементы массива, индексы которых являются степенями двойки.
- Уплотнить массив чисел, удалив нули и сдвинув влево остальные элементы.
- Дан массив натуральных чисел. Образовать новый массив, элементами которого будут элементы исходного массива, оканчивающиеся на цифру k.
- Дан массив четырёхзначных натуральных чисел. Вывести на экран только те, у которых сумма первых двух цифр равна сумме двух последних.
Задача № 5: Чтение данных из JSON-документа #
Модифицируйте предыдущее решение задач таким образом, чтобы исходные данные брались из файла data-input.json, имеющего следующее содержимое:
[10.2, -1.2, 15, 16, -3, -8]Для решения этой задачи необходимо:
- Добавить библиотеку jackson-module-kotlinв качестве зависимостей приложения.
- Создать объект-преобразователь ObjectMapper из библиотеки.
- Считать JSON-документ из файла.
- Преобразовать считанную из файла строку к списку вещественных чисел:
val doubles: List<Double> = objectMapper.readValue(rawJsonData)