按 Java 中的内部列表索引对列表列表进行排序? (Java 相当于 Python 的 'sorted()')
Sorting List of List by inner list's index in Java? (Java Equivalent of Python's 'sorted()')
在 Java 中,我有一个如下所示的列表列表:
[ ["Kelly", "3.0"], ["Jeff", "2.0"], ["Mark", "1.0]" ]
如何按特定索引对列表进行排序?在这种情况下,索引 1
例如)
Given: [ ["Kelly", "3.0"], ["Jeff", "2.0"], ["Mark", "1.0"] ]
Desired: [ ["Mark", "1.0"], ["Jeff", "2.0"], ["Kelly", "3.0"] ]
我正在寻找的东西与 Python 中的 'sorted()' 方法非常相似(我在 Python 中寻找的确切解决方案如下所示:https://www.kite.com/python/answers/how-to-sort-a-list-of-lists-by-an-index-of-each-inner-list-in-python and here: ) 但我正在 Java.
中寻找解决方案
另外,作为奖励,我将如何按降序对这些进行排序?相同值的实例呢(即有多个“3.0”值)
发帖后 2 分钟就解决了我自己的问题。当发生这种情况时,一定要爱 lol:
for (int i=0; i < listToReverse.size(); i++) {
for (int j=0; j < (listToReverse.size()-i-1); j++) {
if ((int)Double.parseDouble(listToReverse.get(j).get(1)) < (int)Double.parseDouble(listToReverse.get(j+1).get(1))) {
ArrayList<String> temp = listToReverse.get(j);
listToReverse.set(j, asList.get(j+1));
listToReverse.set(j+1, temp);
}
}
}
//This implementation sorts in descending order. Switch the '<' for a '>' to sort in ascending order
感谢@bliss 也指出可以在此处使用自定义比较器。可能比迭代方式更漂亮
试试这个。
List<List<String>> list = Arrays.asList(
Arrays.asList("Jhon", "3.0"), Arrays.asList("Kelly", "3.0"),
Arrays.asList("Jeff", "2.0"), Arrays.asList("Mark", "1.0"));
// sort the list by index of 1
list.sort(Comparator.comparing(x -> x.get(1)));
System.out.println(list);
// sort the list by index of 1 descending order
list.sort(Collections.reverseOrder(Comparator.comparing(x -> x.get(1))));
System.out.println(list);
输出:
[[Mark, 1.0], [Jeff, 2.0], [Jhon, 3.0], [Kelly, 3.0]]
[[Jhon, 3.0], [Kelly, 3.0], [Jeff, 2.0], [Mark, 1.0]]
两种情况都是稳定排序
因为Java 8 有方法List::sort
accepting a custom Comparator
which can be built using Comparator.comparing
。
所以,lists的输入列表可以简明排序如下:
List<List<String>> data = Arrays.asList(
Arrays.asList("Kelly", "3.0"),
Arrays.asList("Mark", "1.0"),
Arrays.asList("Jeff", "2.0")
);
// sorting by index 1
data.sort(Comparator.comparing(x -> x.get(1)));
// [[Mark, 1.0], [Jeff, 2.0], [Kelly, 3.0]]
// sorting by index 1 in reverse order using Collections.reverseOrder
data.sort(Comparator.comparing(x -> x.get(1), Collections.reverseOrder()));
// [[Kelly, 3.0], [Jeff, 2.0], [Mark, 1.0]]
// sorting by index 0 in reverse order using Comparator.reversed()
// here type of object being compared needs to be specified
data.sort(Comparator.comparing((List<String> x) -> x.get(0)).reversed());
// [[Mark, 1.0], [Kelly, 3.0], [Jeff, 2.0]]
在 Java 中,我有一个如下所示的列表列表:
[ ["Kelly", "3.0"], ["Jeff", "2.0"], ["Mark", "1.0]" ]
如何按特定索引对列表进行排序?在这种情况下,索引 1
例如)
Given: [ ["Kelly", "3.0"], ["Jeff", "2.0"], ["Mark", "1.0"] ]
Desired: [ ["Mark", "1.0"], ["Jeff", "2.0"], ["Kelly", "3.0"] ]
我正在寻找的东西与 Python 中的 'sorted()' 方法非常相似(我在 Python 中寻找的确切解决方案如下所示:https://www.kite.com/python/answers/how-to-sort-a-list-of-lists-by-an-index-of-each-inner-list-in-python and here:
另外,作为奖励,我将如何按降序对这些进行排序?相同值的实例呢(即有多个“3.0”值)
发帖后 2 分钟就解决了我自己的问题。当发生这种情况时,一定要爱 lol:
for (int i=0; i < listToReverse.size(); i++) {
for (int j=0; j < (listToReverse.size()-i-1); j++) {
if ((int)Double.parseDouble(listToReverse.get(j).get(1)) < (int)Double.parseDouble(listToReverse.get(j+1).get(1))) {
ArrayList<String> temp = listToReverse.get(j);
listToReverse.set(j, asList.get(j+1));
listToReverse.set(j+1, temp);
}
}
}
//This implementation sorts in descending order. Switch the '<' for a '>' to sort in ascending order
感谢@bliss 也指出可以在此处使用自定义比较器。可能比迭代方式更漂亮
试试这个。
List<List<String>> list = Arrays.asList(
Arrays.asList("Jhon", "3.0"), Arrays.asList("Kelly", "3.0"),
Arrays.asList("Jeff", "2.0"), Arrays.asList("Mark", "1.0"));
// sort the list by index of 1
list.sort(Comparator.comparing(x -> x.get(1)));
System.out.println(list);
// sort the list by index of 1 descending order
list.sort(Collections.reverseOrder(Comparator.comparing(x -> x.get(1))));
System.out.println(list);
输出:
[[Mark, 1.0], [Jeff, 2.0], [Jhon, 3.0], [Kelly, 3.0]]
[[Jhon, 3.0], [Kelly, 3.0], [Jeff, 2.0], [Mark, 1.0]]
两种情况都是稳定排序
因为Java 8 有方法List::sort
accepting a custom Comparator
which can be built using Comparator.comparing
。
所以,lists的输入列表可以简明排序如下:
List<List<String>> data = Arrays.asList(
Arrays.asList("Kelly", "3.0"),
Arrays.asList("Mark", "1.0"),
Arrays.asList("Jeff", "2.0")
);
// sorting by index 1
data.sort(Comparator.comparing(x -> x.get(1)));
// [[Mark, 1.0], [Jeff, 2.0], [Kelly, 3.0]]
// sorting by index 1 in reverse order using Collections.reverseOrder
data.sort(Comparator.comparing(x -> x.get(1), Collections.reverseOrder()));
// [[Kelly, 3.0], [Jeff, 2.0], [Mark, 1.0]]
// sorting by index 0 in reverse order using Comparator.reversed()
// here type of object being compared needs to be specified
data.sort(Comparator.comparing((List<String> x) -> x.get(0)).reversed());
// [[Mark, 1.0], [Kelly, 3.0], [Jeff, 2.0]]