如何转换Comparator进行比较?

朴斗俊

这是我要获取的代码。

public static final Comparator<Youku> AscDurRevCreationDate =
      Comparator.comparing(Youku::getDuration)
          .reversed()
          .thenComparing(Youku::getDateCreation)
          .reversed();

下面的代码是我尝试将其转换为的代码。但是,我从下面的代码中得到了一些不同的结果。顺便说一句,我在这里使用Duration对象。

@Override
  public int compare(Youku obj1, Youku obj2) {
    Integer duration = obj1.getDuration().compareTo(obj2.getDuration());
    Integer dateCreation = obj2.getDateCreation().compareTo(obj1.getDateCreation());

    return duration.compareTo(dateCreation );
  }
扎布扎德

说明

看你的Comparator

public static final Comparator<Youku> AscDurRevCreationDate =
      Comparator.comparing(Youku::getDuration)
          .reversed()
          .thenComparing(Youku::getDateCreation)
          .reversed();

您想按Youkus的持续时间(getDuration)降序而不是升序(reversed()比较s ,如果两个持续时间相等,则按创建日期(getDateCreation)的降序打破联系

正确的Comparable实现如下所示:

@Override
public int compareTo(Youku other) {
    int durationResult = Integer.compare(getDuration(), other.getDuration());
    durationResult *= -1; // for reversed

    if (durationResult != 0) { // different durations
        return durationResult;
    }

    // break ties using creation date
    int creationDateResult = Integer.compare(getDateCreation(), other.getDateCreation());
    creationDateResult *= -1;

    return creationDateResult;
}

或紧凑:

int durationResult = -1 * Integer.compare(getDuration(), other.getDuration());
return durationResult != 0
    ? durationResult
    : -1 * Integer.compare(getDateCreation(), other.getDateCreation());

基于比较器

另外,您也可以根据Comparator已有的方法来实现该方法

public static final Comparator<Youku> comparator =
    Comparator.comparing(Youku::getDuration)
      .reversed()
      .thenComparing(Youku::getDateCreation)
      .reversed();

...

@Override
public int compareTo(Youku other) {
   return comparator.compare(this, other);
}

笔记

您的代码尝试不会显示Comparable实现,而是针对的手动实现Comparator我想你在那弄乱了什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将以下比较器转换为Comparator.comparing?

Assert.Equal 如何进行转换比较?

如何使用比较器将String转换为int并进行比较

Custom Comparator。仅按Java 8中的字段进行比较

如何将游戏对象转换数据与其他转换数据进行比较?

Yesod Persistent-如何将Day与UTCTime进行比较?(如何转换它们?)

如何在Comparator中处理null比较方法参数?

如何将字符串转换为时间戳以进行比较?

如何将此 javascript 日期时间对象转换为与当前对象进行比较

如何将动态对象转换为类型并进行比较

如何将“ 12/08/16”转换为日期格式并在VBA中进行比较?

如何将数据表转换为list <string>,然后将其与Textbox值进行比较?

如何使用C#强制将.unityfile转换为文本以进行实例ID比较

如何从字段转换日期以在WHEN-VALIDATE-ITEM触发器上进行比较

我该如何使用JavaScript方法将参数与对象强制转换值进行比较?

如何在PHP中使用STRPOS将-> getAttribute('class')转换为字符串以进行比较

如何将编辑文本与在 Kotlin 中转换为字符串的变量进行比较

如何使用 Comparator<Object> 进行升序、降序而不进行排序

比较是基于我自己的方法的结果时,如何使用Comparator.comparing()定义新的Comparator?

gnuplot:如何与NaN进行比较?

javascript如何进行比较?

如何与 Eigen 进行元素比较?

如何与单词的前缀进行比较

如何使用Comparator和Iterator对Integer Vector进行排序?

如何使用 Java Comparator 对数组进行排序?

如何正确地将 C 中任何类型的数据与指针进行比较并将类型转换为 char

如何将日期和时间字段转换为正确的日期时间格式,以便在 MySQL 中进行 NOW() 比较?

如何将Ajax响应转换为字符串以与JS字符串进行比较

如何将列表列表转换为python中的集合,以便可以与其他集合进行比较?