![](/img/trans.png)
[英]Sorting a list of lists by the first element of inner list (Java or groovy)
[英]Java: how to create a list cons that accepts lists for the first element
当我创建一个 Java 列表并且我希望头部是一个列表时,它应该打印一个 [[-1,0],1,2,3,4] 还是没关系,它只是离开子列表 [-1, 0]作为两个分离的元素,如 [-1, 0, 1, 2,3,4] ,我怎样才能得到第一个结构作为 aswer。
从您的帖子中,我猜您是在询问如何在 Java 中创建一个列表“构造”,其中包含列表和非列表元素。
在 Java 中,列表/数组的所有元素都需要具有相同的类型。 在您发布的示例中( [[-1,0],1,2,3,4]
),元素的类型并不完全相同。 您所拥有的是: [List<Integer>, Integer, Integer, Integer, Integer]
。 第一个不同,在Java中是不允许的。
所以,你需要做的是让你的列表/数组的所有元素都是相同的类型。
对于您的情况,您的 list 中只有整数,最简单的方法是将您的类型更改为: [List<Integer>, List<Integer>, List<Integer>, List<Integer>, List<Integer>]
(使用您的特定值: [[-1,0],[1],[2],[3],[4]]
)。 而不是List<Integer>
和Integer
的列表,您现在有一个仅包含List<Integer>
的列表(您的某些列表恰好只包含 1 个元素,但这没关系)。
这称为“二维列表”,根据您是否要使用 arrays 或java.util.List
进行编码,您可以通过以下方式之一对其进行编码:
// with arrays
int[] myTwoDarr = int[5][];
myTwoDarr[0] = new int[]{-1, 0};
myTwoDarr[1] = new int[]{1};
myTwoDarr[2] = new int[]{2};
myTwoDarr[3] = new int[]{3};
myTwoDarr[4] = new int[]{4};
// With Lists
List<List<Integer>> myList = new LinkedList<>();
List<Integer> nestedList1 = new LinkedList<>();
nestedList.add(-1);
nestedList.add(0);
myList.add(nestedList1);
List<Integer> nestedList2 = new LinkedList<>();
nestedList2.add(1);
myList.add(nestedList2);
...etc...
现在,如果您的列表中绝对必须有不同类型的数据,您可以创建一个Object
列表。
在 Java 中, Object
是所有非原始类型都继承自的类型。 因此,只要某些东西不是原语,它就是Object
并且可以在 Object 列表中的Object
中。 这将允许您将任何类型的数据放入列表的元素中。 Using Object
allows you to have a list of all the same type which looks like this: [Object, Object, Object, Object, Object]
. 但是,现在 Java 不知道您实际存储在元素中的特定类型,因此您需要在获取它们时进行类型转换。
这是使用java.util.List
的示例:
List<Object> myList = new LinkedList<>();
List<Integer> nestedList = new LinkedList<>();
nestedList.add(-1);
nestedList.add(0);
myList.add(nestedList);
myList.add(1);
myList.add("a string");
// You need to cast when taking elements out of the list.
List<Integer> newNest = (List<Integer>) myList.get(0);
Integer myInt = (Integer) myList.get(1);
String myString = (String) myList.get(2);
由于所有基本数据类型都相同( Integer
/ int
),我建议避免使用Object
列表方法并使用 2D 列表。 不做所有这些转换更简单,更不容易出错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.