如何解决在Java中按内部列表的索引对列表进行排序? Java 相当于 Python 的“sorted()”
在 Java 中,我有一个 List of List,如下所示:
[ ["Kelly","3.0"],["Jeff","2.0"],["Mark","1.0]" ]
如何按某个索引对列表进行排序?在这种情况下,索引为 1
例如)
Given: [ ["Kelly","1.0"] ]
Desired: [ ["Mark","1.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 和此处:sort list of lists by specific index of inner list ) 但我正在寻找 Java 中的解决方案。
另外作为奖励,我将如何按降序对这些进行排序?相同值的实例怎么样(即有多个“3.0”值)
解决方法
从 Java 8 开始,就有方法 List::sort
接受可以使用 Comparator.comparing
构建的自定义 Comparator
。
因此,列表的输入列表可以简明地排序如下:
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],[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,2.0]]
,
试试这个。
List<List<String>> list = Arrays.asList(
Arrays.asList("Jhon",Arrays.asList("Kelly","2.0"),"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,[Jhon,3.0]]
[[Jhon,1.0]]
在两种情况下都是稳定排序。
,在发布后 2 分钟内解决了我自己的问题。发生这种情况时总是要爱,哈哈:
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 指出可以在这里使用自定义比较器。可能比迭代方式漂亮多了
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。