Java Comparator.naturalOrder() 方法函数的使用和说明

原创     发表于 2020-12-03 16:53     阅读 295  

Comparator.naturalOrder() 方法函数是个啥?请看正文解释……

Comparator.naturalOrder() 方法函数,其实是为简化操作,也可以理解为提升方法美观度,提高可理解性。针对 naturalOrder() ,API 的介绍是这么写的:“Returns a comparator that compares {@link Comparable} objects in natural”。什么意思呢?说白了就是将之前提倡的 compare 比较表达式给替换了,改由 Comparator.naturalOrder() 内部实现。

源码参考:

/**
 * Returns a comparator that compares {@link Comparable} objects in natural
 * order.
 *
 * <p>The returned comparator is serializable and throws {@link
 * NullPointerException} when comparing {@code null}.
 *
 * @param  <T> the {@link Comparable} type of element to be compared
 * @return a comparator that imposes the <i>natural ordering</i> on {@code
 *         Comparable} objects.
 * @see Comparable
 * @since 1.8
 */
@SuppressWarnings("unchecked")
public static <T extends Comparable<? super T>> Comparator<T> naturalOrder() {
	return (Comparator<T>) Comparators.NaturalOrderComparator.INSTANCE;
}

在编码中,如果我们使用了 compare 比较表达式,即“(e1, e2) -> e1.compareTo(e2)”,代码编辑器一般会进行着色(暗黑色)进行提示。


两种风格的编码对照,强烈推荐使用 Comparator.naturalOrder() ,以 Integer 类型的集合获取最大值为例:

/**
 * @Author: HuangLongPu
 * @Date: 2020/12/2 23:23
 */
public class Test {

    public static void main(String[] args) {
        List<Integer> array = Arrays.asList(3, 2, 1, 5, 6, 4);

        Integer compareMax = array.stream().distinct().max((e1, e2) -> e1.compareTo(e2)).get();
        System.out.println("compare type max > " + compareMax);

        Integer naturalOrderMax = array.stream().distinct().max(Comparator.naturalOrder()).get();
        System.out.println("naturalOrder type max > " + naturalOrderMax);
    }
}

从输出的结果来看,两种写法结果是一致的。结果打印如下:

compare type max > 6
naturalOrder type max > 6

Process finished with exit code 0