How to transpose List?

前端 未结 10 731
温柔的废话
温柔的废话 2021-01-01 17:59

I have a following ArrayList,

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

And I would like to convert this one like this,



        
10条回答
  •  天命终不由人
    2021-01-01 19:04

    This is called transposition. The following snippet does what you need:

    import java.util.*;
    public class ListTranspose {
        public static void main(String[] args) {
            Object[][] data = {
                { "Title", "Data1", "Data2", "Data3" },
                { "A", 2, 3, 4 },
                { "B", 3, 5, 7 },
            };
            List> table = new ArrayList>();
            for (Object[] row : data) {
                table.add(Arrays.asList(row));
            }
            System.out.println(table); //  [[Title, Data1, Data2, Data3],
                                       //   [A, 2, 3, 4],
                                       //   [B, 3, 5, 7]]"
            table = transpose(table);
            System.out.println(table); //  [[Title, A, B],
                                       //   [Data1, 2, 3],
                                       //   [Data2, 3, 5],
                                       //   [Data3, 4, 7]]
        }
        static  List> transpose(List> table) {
            List> ret = new ArrayList>();
            final int N = table.get(0).size();
            for (int i = 0; i < N; i++) {
                List col = new ArrayList();
                for (List row : table) {
                    col.add(row.get(i));
                }
                ret.add(col);
            }
            return ret;
        }
    }
    

    See also

    • Wikipedia/Transpose

提交回复
热议问题