Как транспонировать список <List>? - PullRequest
13 голосов
/ 31 мая 2010

У меня есть следующий ArrayList,

[Title,Data1,Data2,Data3]
[A,2,3,4]
[B,3,5,7]

И я хотел бы преобразовать этот как

[Title,A,B]
[Data1,2,3]
[Data2,3,5]
[Data3,4,7]

Я немного запутался с подходом. Любая подсказка будет высоко ценится.

Спасибо.

Ответы [ 11 ]

0 голосов
/ 16 января 2016

Так как get(index) может сильно повредить вашей производительности, т. Е. Для большого связанного списка, я бы рекомендовал использовать решение @polygenelubricants, но с итерационным подходом.

public static <T> List<List<T>> transpose(List<List<T>> table) {
        List<List<T>> ret = new ArrayList<List<T>>();
        final int N = table.stream().mapToInt(l -> l.size()).max().orElse(-1);
        Iterator[] iters = new Iterator[table.size()];

        int i=0;
        for (List<T> col : table) {
            iters[i++] = col.iterator();
        }

        for (i = 0; i < N; i++) {
            List<T> col = new ArrayList<T>(iters.length);
            for (Iterator it : iters) {
                col.add(it.hasNext() ? (T) it.next() : null);
            }
            ret.add(col);
        }
        return ret;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...