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

在Java8中反转比较器

韩晋
2023-03-14

我有一个ArrayList,需要按降序排序。我用java来实现它。util。流动流动排序(比较器)方法。以下是根据Java API的描述:

返回由该流的元素组成的流,根据提供的比较器进行排序。

这个方法返回一个升序排序。为了得到降序,我应该更改哪个参数


共有3个答案

桂杰
2023-03-14

Java 8Comparator接口有一个反向方法:https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#reversed--

程旭尧
2023-03-14

你也可以使用比较器。比较(功能、比较器)
必要时可以方便地链接比较器,例如:

Comparator<SomeEntity> ENTITY_COMPARATOR = 
        Comparator.comparing(SomeEntity::getProperty1, Comparator.reverseOrder())
        .thenComparingInt(SomeEntity::getProperty2)
        .thenComparing(SomeEntity::getProperty3, Comparator.reverseOrder());
唐运诚
2023-03-14
匿名用户

你可以使用比较器。reverseOrder()使用比较器给出与自然顺序相反的顺序。

如果要反转现有比较器的顺序,可以使用comparator。反转()

示例代码:

Stream.of(1, 4, 2, 5)
    .sorted(Comparator.reverseOrder()); 
    // stream is now [5, 4, 2, 1]

Stream.of("foo", "test", "a")
    .sorted(Comparator.comparingInt(String::length).reversed()); 
    // stream is now [test, foo, a], sorted by descending length

 类似资料:
  • 假设我有一个双人课 我希望对它进行排序,首先是第一个值,然后是第二个值。现在,如果我这样做 一切都很好,列表按对的第一个值排序,但如果我这样做 它因错误而失败 好吧,所以它可能无法推断参数,所以如果我这样做 它因错误而失败 为什么它适用于comparing()而不适用于comparing()。然后比较()?

  • 我想用Lambda对列表排序: 但我得到了这个编译错误:

  • 我有这个对象: 我想按收到日期排序; 但这似乎是不可能的,因为我得到了一个编译错误:

  • 下面的代码片段适用于条件1,但不适用于条件2。

  • 我有一个关于compareTo函数如何帮助比较器排序的问题,即o1。比较(o2)与o2。比较(o1) 如果两个字符串相等,则此方法返回0,否则返回正值或负值。如果第一个字符串在词典上大于第二个字符串,则结果为正,否则结果为负。 上面的陈述很简单,但是为什么o1.compare(o2)会给我一个升序,而o2.compare(o1)给了我一个降序? 如果我有整数值“5,10,3”,我得到3,5,10和

  • 我正在为Java8证书做准备,下面的内容让我有点困惑,也许有人能帮我?在这个例子中,一个Squirrel类被建模。它有一个名称和一个权重。现在你可以创建一个比较器类来使用这两个字段对它进行排序。所以首先按名称排序,然后按权重排序。类似于这样: 到现在为止,一直都还不错。。但接下来是令人困惑的部分。在代码示例下面,它们声明您可以使用方法链接在一行中编写此代码。也许我误解了,但当我将比较部分和then