加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:26:57 所属栏目:Java 来源:网络整理
导读:我有一个清单: ListListItem = [["a","one",3],["b",2],["c",4],["d","two",["e",1],["f",1]] 我想用子数组中的第二个值对它进行排序,如果有两个像,那么它应该按第三个值排序,如果它从那里找到两个,那么它应该按第一个元素排序. 所以最终结果应该是这样的:
我有一个清单:

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));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读