我有一个双数组的列表,我想按第一个和最后一个字段排序。到目前为止,我只能按数组的1个元素对它进行排序。
真实状态:
0 1 2
------- ------- -------
78 100 0
78 100 1
0 100 0
104 100 1
预期:
0 1 2
------- ------- -------
0 100 0
78 100 1
78 100 0
101 100 1
我想根据数组第一个元素的值对字段进行排序。如果第一和第二的值相等,我想根据第三个元素排序,其中第一个元素应该是1,然后是0(只有1和0的值)
List<Double[]> splitList = new ArrayList<>();
Double[] tmp1 = { 78d, 100d, 0d };
Double[] tmp2 = { 78d, 100d, 1d };
Double[] tmp3 = { 0d, 100d, 0d };
Double[] tmp4 = { 104d, 100d, 1d };
splitList.add(tmp1);
splitList.add(tmp2);
splitList.add(tmp3);
splitList.add(tmp4);
splitList.sort(Comparator.comparingDouble(a -> a[0]));
这个根据第一个元素来分类。我找到了按两个元素排序的解决方案https://stackoverflow.com/a/26865122/9774735 所以我试了一下:
splitList.sort(Comparator.comparingDouble(a -> a[0]).thenComparingDouble(b -> b[2]));
它给了我一个错误:
Multiple markers at this line
- The type of the expression must be an array type but it resolved
to Object
- The type of the expression must be an array type but it resolved
如何比较数组列表?
3条答案
按热度按时间ljo96ir51#
试试这个:
5cnsuln72#
如果您使用java 8或下一版本,您可以使用:
要在控制台中打印:
或者您可以在列表中收集,然后也可以打印列表:
祝你好运!
m528fe3b3#
似乎java编译器在推断泛型类型方面有问题,您可以使用一些选项来解决此问题:
在模式中使用类型提示
Class.<GenericType>.method(Arguments)
:声明lambda参数类型(第一次声明就足够了):
在阅读了您的评论之后,您想反转上一个比较,可以这样做:
这是相当混乱的,你最好用这样的东西: