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

按子列表中的项目对Java List进行排序

我有一个清单:

List<List<Item>> = [["a","one",3],["b",2],["c",4],["d","two",["e",1],["f",1]]

我想用子数组中的第二个值对它进行排序,如果有两个像,那么它应该按第三个值排序,如果它从那里找到两个,那么它应该按第一个元素排序.
所以最终结果应该是这样的:

[["e",["a",2]]

有人能告诉我一些好方法吗?

谢谢!

解决方法

[“a”,“one”,3]应该是你班级的实例

class Item{
    private String val1;
    private String val2;
    private int val3;
    //getters and setters
}

这样您的列表就是List< Item>.现在您可以使用Collections.sort(list,yourComparator)或者使用Java 8 list.sort(yourComparator).

作为yourComparator,您可以传递实现Comparator接口的类的实例,例如以某种方式

Comparator<Item> yourComparator = new Comparator<Item>() {

    @Override
    public int compare(Item o1,Item o2) {
        //comapre val2
        int result = o1.getVal2().compareto(o2.getVal2());
        if (result != 0) return result;

        //if we are here val2 in both objects ware equal (result was 0)
        result = Integer.compare(o1.getVal3(),o2.getVal3());
        if (result != 0) return result;

        return o1.getVal1().compareto(o2.getVal1());
    }
};

但是可能更具可读性且可能更容易的方法是为每个字段创建单独的比较器并将它们组合起来.如果您使用的是Java 8,则代码可能如下所示:

Comparator<Item> val1Comparator = Comparator.comparing(Item::getVal1);
Comparator<Item> val2Comparator = Comparator.comparing(Item::getVal2);
Comparator<Item> val3Comparator = Comparator.comparingInt(Item::getVal3);


list.sort(val2Comparator
        .thenComparing(val3Comparator)
        .thenComparing(val1Comparator));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐