【发布时间】:2021-10-20 19:12:20
【问题描述】:
我正在尝试以 List<List<Integer>> 的字典方式进行排序。但我无法实现目标,也不知道问题出在哪里。
List<List<Integer>> result = new ArrayList<List<Integer>>();
result.add(Arrays.asList(1, 3, 76, 99));
result.add(Arrays.asList(1, 2, 84, 92));
result.add(Arrays.asList(1, 1, 76, 99));
java.util.Collections.sort(result, (item1, item2) -> {
if (item1.get(0) > item2.get(0) || item1.get(1) > item2.get(1) || item1.get(2) > item2.get(2)
|| item1.get(3) > item2.get(3)) {
return 1;
} else {
return -1;
}
});
预期输出: [[1, 1, 76, 99], [1, 2, 84, 92], [1, 3, 76, 99]]
但我得到了 [[1, 3, 76, 99], [1, 2, 84, 92], [1, 1, 76, 99]]
我希望索引最小的数字会排在第一位。在示例中,所有三个列表的第一个位置都有 1,因此没有变化。在第二个位置,第三个列表有 1,这是三个列表中的最小值,因此第三个列表将移动到第一个。然后考虑到第 2 和第 3 个列表的第 2 项 2 较低,因此第二个列表将保持在第 2 个位置。
【问题讨论】:
-
“字典顺序”是什么意思?字典顺序是在
Strings 上定义的,而不是ints。 -
item1.get(0) > item2.get(0) || item1.get(1) > item2.get(1)对于[[0, 2], [1, 1]]将是真的,因为后半部分是真的。此外,您缺少相等 (0) 的路径。 -
如果输入是向后的,是否要翻转
-1和1?如果所有数字都相同怎么办?你应该返回0吗?你有更好的例子吗? -
@Turing85 您可以将字典顺序应用于任何有序元素序列。例如,参见 Guava 的
Ordering.lexicographical()。 -
我希望索引最小的数字会排在第一位。在示例中,所有三个列表的第一个位置都有 1,因此没有变化。在第二个位置,第三个列表有 1,这是三个列表中的最小值,因此第三个列表将移动到第一个。然后考虑到第 2 和第 3 个列表的第 2 项 2 较低,因此第二个列表将保持在第 2 个位置。
标签: java