Как изменить `List` на` List of tuple` в java - PullRequest
1 голос
/ 19 марта 2020

Я использую приведенную ниже функцию для преобразования sublists из list в 0 и остальных элементов в 1, однако я пытаюсь изменить структуру данных на list of tuple.

например, функция обеспечивает ввод от [1,2,3,5,10] до [0,0,0,1,1]. Как я могу преобразовать эту структуру данных, чтобы получить следующий вывод, как это: [(0,1),(0,2),(0,3),(1,5),(1,10)]? Или, возможно, к другой подобной структуре данных, если это возможно? как list of two element arrays

public static void main(String[] args) {
    int[] arr = { 1, 8, 1, 9, 10 };

    // assume arr.length >= 2
    boolean asc = arr[1] - arr[0] == 1;
    for (int i = 1; i < arr.length - 1; i++) {
        if (arr[i + 1] - arr[i] == 1) {
            arr[i] = 0;
            asc = true;
        } else {
            if (asc) {
                asc = false;
                arr[i] = 0;
            }
            else {
                arr[i] = 1;
            }
        }
    }
    arr[arr.length - 1] = asc ? 0 : 1;

    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
}

1 Ответ

1 голос
/ 19 марта 2020

Вы можете создать класс Tuple для хранения ваших значений

public class Tuple {
    int first;
    boolean second;

    public Tuple(int first, boolean second) {
        this.first = first;
        this.second = second;
    }

    @Override
    public String toString() {
        return String.format("(%d, %b)", first, second);
    }
}

И затем немного изменить свой код, чтобы использовать его

final int[] arr = { 1, 8, 1, 9, 10 };
Tuple[] result = new Tuple[arr.length];

boolean asc = arr[1] - arr[0] == 1;
result[0] = new Tuple(arr[0], asc);
for (int i = 1; i < arr.length - 1; i++) {
    if (arr[i + 1] - arr[i] == 1) {
        asc = true;
    } else {
        if (asc) {
            asc = false;
        }
    }
    result[i] = new Tuple(arr[i], asc);
}
result[arr.length - 1] = new Tuple(arr[arr.length - 1], asc);
for (int i = 0; i < arr.length; i++) {
    System.out.println(result[i]);
}

Это выводит

(1, ложь)
(8, ложь)
(1, ложь)
(9, истина)
(10, истина)

Обратите внимание, что если / иначе внутри циклов for, вероятно, можно улучшить, но так как это не было важно для ответа, я сам этого не сделал

...