Работа со списками данных в Kotlin

Работа со списками данных в Kotlin #

Документация #

Задача № 1: фильтрация коллекции #

Входные данные: последовательность целых чисел. Для формирования изначального списка данных можно воспользоваться инициализацией из исходного кода, без необходимости считывать их из внешних по отношению к приложению источникам.

val numbers = listOf(1, 55, 25, 32, 2, 67, 31, 33, 11, 25, 66, 81, 97, 43, 46, 81)
  1. Найти нечётные числа данной последовательности.
  2. Найти числа, которые не делятся без остатка на 3.
  3. Найти числа, которые без остатка делятся на свой порядковый номер.

Поставленные задачи необходимо решить следующими способами:

  1. С использованием цикла for.
  2. С использованием функции forEach.
  3. С использованием функции filter, filter.
  4. С использованием функции forEachIndexed.
  5. С использованием функции 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),
)

Для данной последовательности прямоугольников вычислите:

  1. Список периметров данных прямоугольников.
  2. Список площадей данных прямоугольников.
  3. Список полупериметров прямоугольников. Для его вычисления используйте свойства высоты и ширины.
  4. Список диагоналей прямоугольников. Вычисление диагонали должно происходить в рамках обхода списка.

Поставленные задачи необходимо решить следующими способами:

  1. С использованием цикла for.
  2. С использованием функции forEach.
  3. С использованием функции forEachIndexed.
  4. С использованием функции map.
  5. С использованием функции mapIndexed.

Задача № 3: вычисление статистических данных о коллекции #

Входные данные: список строк.

val strings = listOf(
    "Apple",
    "Orange",
    "Peach",
    "Banana",
    "Tangerine",
    "Grapefruit",
    "Kiwi",
)

Для данной последовательности строк вычислите:

  1. Начинаются ли все строки с заглавной буквы?
  2. Есть ли среди строк строка длины 5?
  3. Во всех ли строках встречается 2 гласные буквы?
  4. Отсутствуют ли в строках русские буквы?

Поставленные задачи необходимо решить следующими способами:

  1. С использованием цикла for.
  2. С использованием функции forEach.
  3. С использованием функции all.
  4. С использованием функции any.
  5. С использованием функции none.

Задача № 4: применение полученных знаний #

Решите следующие задачи. Входные данные для данных задач можно формировать в прямо в исходном коде, без получения от пользователя.

  1. Определить, сколько раз в последовательности из целых чисел меняется знак, а также номера позиций, в которых происходит смена знака.
  2. Напечатать те элементы массива, индексы которых являются степенями двойки.
  3. Уплотнить массив чисел, удалив нули и сдвинув влево остальные элементы.
  4. Дан массив натуральных чисел. Образовать новый массив, элементами которого будут элементы исходного массива, оканчивающиеся на цифру k.
  5. Дан массив четырёхзначных натуральных чисел. Вывести на экран только те, у которых сумма первых двух цифр равна сумме двух последних.

Задача № 5: Чтение данных из JSON-документа #

Модифицируйте предыдущее решение задач таким образом, чтобы исходные данные брались из файла data-input.json, имеющего следующее содержимое:

[10.2, -1.2, 15, 16, -3, -8]

Для решения этой задачи необходимо:

  1. Добавить библиотеку jackson-module-kotlin в качестве зависимостей приложения.
  2. Создать объект-преобразователь ObjectMapper из библиотеки.
  3. Считать JSON-документ из файла.
  4. Преобразовать считанную из файла строку к списку вещественных чисел:
    val doubles: List<Double> = objectMapper.readValue(rawJsonData)

© A. M. Васильев, 2024, CC BY-SA 4.0, andrey@crafted.su