Работа со списками данных в 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)