我正在使用Java中的List数据结构。如果列表包含n个列表,则返回通过从每个n列表中拾取元素而形成的n元素列表。
一个例子:
Input:[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
Output:[[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]]
Input:[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
Output:[[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]]
Input:[[1, 2], [3, 4], [5, 6]]
Output:[[1, 3, 5], [2, 4, 6]]
以下代码有效,但它看起来像一个修复,有没有办法我们可以使用一个for循环来实现它。
public class ListTuple
{
@SuppressWarnings({ "unchecked" })
public static void main(String args[])
{
List<List<Integer>> newFinalList = new ArrayList<List<Integer>>();
List<Integer> newList1 = new ArrayList<Integer>();
List<Integer> newList2 = new ArrayList<Integer>();
List<Integer> list1 = Arrays.asList(1 , 2);
List<Integer> list2 = Arrays.asList(3 , 4);
List<Integer> list3 = Arrays.asList(5 , 6);
List<Integer> list4 = Arrays.asList(7 , 8);
List<Integer> list5 = Arrays.asList(9 , 10);
List<List<Integer>> finalList = Arrays.asList(list1, list2, list3, list4, list5);
for (List<Integer> elementOfFinalList : finalList)
{
newList1.add(elementOfFinalList.get(0));
}
for (List<Integer> elementOfFinalList : finalList)
{
newList2.add(elementOfFinalList.get(1));
}
newFinalList.add(newList1);
newFinalList.add(newList2);
System.out.println("Input:" + finalList);
System.out.println("Output:" + newFinalList);
}
}
与此同时,上述代码无效。
Input:[[1, 2, 3], [4, 5, 6]]
Output:[[1, 4], [2, 5], [3, 6]]
任何建议都会有所帮助。
谢谢!
答案 0 :(得分:0)
您可以将两个for循环压缩为一个
for (List<Integer> elementOfFinalList : finalList)
{
newList1.add(elementOfFinalList.get(0));
newList2.add(elementOfFinalList.get(1));
}
这看起来就像它将要获得的那样紧凑
你的意思是什么代码不起作用?您的代码适用于我(使用导入)
这套输入/输出是什么意思?
Input:[[1, 2, 3], [4, 5, 6]]
Output:[[1, 4], [2, 5], [3, 6]]
答案 1 :(得分:0)
这是一些数组类对于你,我从“http://underscorejs.org/”代码引用它。我相信得分不高的源代码是最好的方法之一。
package com.list; import java.util.ArrayList; public class ListManagement { //picking value of idx and put on the resultList //list must be contained two depth list public static ArrayList map(ArrayList lists,int idx){ ArrayList resultList = new ArrayList(); for(ArrayList list : lists){ resultList.add(list.get(idx)); } return resultList; } // Size Return public static int getLength(ArrayList lists){ int resultLength = 0; for(ArrayList list : lists){ resultLength = list.size() > resultLength ? list.size() : resultLength; } return resultLength; } public static ArrayList unzip(ArrayList lists){ int length = getLength(lists); ArrayList resultList = new ArrayList(); for(int j = 0; j lists){ ArrayList resultList = unzip(lists); return resultList; } public static void main(String[] args) { ArrayList list1 = new ArrayList(); list1.add("aaa"); list1.add("111"); list1.add("!!!"); list1.add("AAA"); ArrayList list2 = new ArrayList(); list2.add("bbb"); list2.add("222"); list2.add("@@@"); list2.add("BBB"); ArrayList list3 = new ArrayList(); list3.add("ccc"); list3.add("333"); list3.add("###"); list3.add("CCC"); ArrayList mainList = new ArrayList(); mainList.add(list1); mainList.add(list2); mainList.add(list3); ArrayList resultList = ListManagement.unzip(mainList); System.out.println("Un-Zipped Array : "+resultList); resultList = ListManagement.zip(resultList); System.out.println("Zipped Array : "+resultList); } }
这是结果
Un-Zipped Array : [[aaa, bbb, ccc], [111, 222, 333], [!!!, @@@, ###], [AAA, BBB, CCC]] Zipped Array : [[aaa, 111, !!!, AAA], [bbb, 222, @@@, BBB], [ccc, 333, ###, CCC]]