当前位置: 首页 > 知识库问答 >
问题:

可以列出。stream()。用三个糖果怎么样?

松飞翮
2023-03-14

我已经成功排序按照执行,

如果“类别”字段等于,则比较“排序”字段,如果“类别”字段不等于,则比较“id”字段。

List<Contact> originContactList = ...;

originContactList.sort((contact1, contact2) -> {
    if (contact1.getCategory().compareTo(contact2.getCategory()) == 0) {
        return contact1.getSort().compareTo(contact2.getSort());
    } else {
        return contact1.getId().compareTo(contact2.getId());
    }
});

我想用java8list.stream(). sorted做上面的代码一样。可以吗?

如果“category”字段不等于,则无法比较“id”字段。

List<Contact> originContactList = ...;

originContactList.stream().sorted(
        Comparator
                .comparing(Contact::getCategory)
                .thenComparingLong(Contact::getSort)
)
...

共有1个答案

龚勇锐
2023-03-14

您也可以将第一个示例中的比较器用于流:

List<Contact> originContactList = ...;

originContactList.stream().sorted(
    (contact1, contact2) -> {
    if (contact1.getCategory().compareTo(contact2.getCategory()) == 0) {
        return contact1.getSort().compareTo(contact2.getSort());
    } else {
        return contact1.getId().compareTo(contact2.getId());
    }
})

但是:您编写的任何比较器都必须遵守一条基本规则:

如果它说从三个触点中,contactAcontactBcontactC中,contactA应该在contactB之前排序,contactB应该在contactC之前排序,那么它还必须说contactA应该在contactC之前排序。

或者用比较器的JavaDoc的话来说。compare()

实现者还必须确保关系是可传递的:((比较(x,y))

使用您的比较器实现,很容易创建违反此规则的三个联系人。

 类似资料:
  • 在输出的唯一一行上,打印一个整数,描述Alice必须给出的糖果的最小数量。 爱丽丝必须给的糖果数是1、2和1。 且每个子级的分级不大于10^5。

  • 一、纯本地App 没任何服务请求,已经有开发好的一堆html+js,希望本地App中可以方便的使用,那可以参考默认的Native/X5工程,把自己开发好的资源放到www目录下就可以,注意工程的几个重要选项: 服务地址:http://localhost 首页: 假设你www中有一个入口的index.html,那写 /index.html 生成App包的向导中,“重新编译使用到的UI资源”一定不要选

  • 一、纯本地App 没任何服务请求,已经有开发好的一堆html+js,希望本地App中可以方便的使用,那可以参考默认的Native/X5工程,把自己开发好的资源放到www目录下就可以,注意工程的几个重要选项: 服务地址:http://localhost 首页: 假设你www中有一个入口的index.html,那写 /index.html 生成App包的向导中,“重新编译使用到的UI资源”一定不要选

  • 本文向大家介绍topic的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么?相关面试题,主要包含被问及topic的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么?时的应答技巧和注意事项,需要的朋友参考一下 可以增加 bin/kafka-topics.sh --zookeeper localhost:2181/kafka --alter --topic topic-co

  • 本文向大家介绍topic的分区数可不可以减少?如果可以怎么减少?如果不可以,那又是为什么?相关面试题,主要包含被问及topic的分区数可不可以减少?如果可以怎么减少?如果不可以,那又是为什么?时的应答技巧和注意事项,需要的朋友参考一下 不可以减少,被删除的分区数据难以处理。

  • 我收到了以下错误 有没有办法捕获它。 我尝试使用try and catch,但不工作的应用程序正在崩溃 我的代码 我的班级 完整错误代码