Оптимизация кода (ternary + for)

83
27 февраля 2022, 09:20

Решил задачку, но код все же надо оптимизировать. Не могу понять, как можно избавиться от тернарного в return, добавив его в цикл for(точнее во второе выражение цикла, чтобы он сразу работал и возвращал тот кусок, который мне необходим по заданию).

Само задание: Полученный массив чисел преобразовываем в список, затем все четные числа увеличиваем на один, после чего возвращаем кусок списка с 3 по 7 элементы.

Тест к заданию:

@Test
    void task2() {
        assertIterableEquals(
                Arrays.asList(57, 23, 43, 95, 13),
                Lesson10_CollectionsLists.task2(23, 15, 1, 56, 22, 42, 95, 13, 9)
        );
        assertIterableEquals(
                Arrays.asList(5, 7, 5, 7, 5),
                Lesson10_CollectionsLists.task2(7, 4, 7, 4, 7, 4, 7, 4, 7)
        );
        assertIterableEquals(
                Arrays.asList(5, -7, 15, 27, 5),
                Lesson10_CollectionsLists.task2(0, -4, 7, 4, -7, 14, 27, 4, -27)
        );
        assertIterableEquals(
                Arrays.asList(15, 27, 5),
                Lesson10_CollectionsLists.task2(0, 7, 4, 14, 27, 4)
        );
    }

Решение к заданию(код, который нужно оптимизировать):

public static List<Integer> task2(Integer... array) {
        List<Integer> myArrays = Arrays.asList(array);
        for (int i = 0; i < myArrays.size(); i++) {
            if (myArrays.get(i) % 2 == 0) {
                myArrays.set(i, myArrays.get(i) + 1);
            }
        }
        return myArrays.size() >= 8 ? myArrays.subList(3, 8) : myArrays.subList(3, myArrays.size());
    }
Answer 1

Предлагаю следующие исправления(касается ошибок и оптимизации):

public static List<Integer> task2(Integer... array) {
    if(array.length < 7) {
        throw new IllegalArgumentException("need over 6 elements");
    }
    ArrayList<Integer> list3to7 = new ArrayList<>(5);
    for(int i = 2; i < 7; i++) {
        if(array[i] % 2 == 0) {
            array[i]++;
        }
        list3to7.add(array[i]);
    }
    return list3to7;
}
READ ALSO
Какую коллекцию применить?

Какую коллекцию применить?

Например, мы имеем следующий класс:

134
This application has no explicit mapping for /error, so you are seeing this as a fallback

This application has no explicit mapping for /error, so you are seeing this as a fallback

При запуске проекта на Java, с использованием Spring появляется ошибка: "This application has no explicit mapping for /error, so you are seeing this as a fallback" Данное приложение представляет...

220
Какие есть альтернативы TreeSet

Какие есть альтернативы TreeSet

Решил задачу, но как я понял просто TreeSet без лишних методов для сортировки классов не годитсяВыдает ошибку: cannot be cast to class java

163
Factory method - Фабричный метод

Factory method - Фабричный метод

Зачем нужен фабричный метод?

109