微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Java中按内部列表的索引对列表进行排序? Java 相当于 Python 的“sorted()”

如何解决在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 举报,一经查实,本站将立刻删除。