Integer.compare可直接作为Comparator<Integer>方法引用用于Stream.sorted(),因其静态方法签名经自动拆箱后匹配;升序用Integer::compare,降序需reverseOrder或手动反转;含null时须用nullsLast/nullsFirst包装。

<p>可以直接把 <strong>Integer.compare</strong> 当作方法引用传给 <strong>Stream.sorted()</strong>,它天然符合 <code>Comparator<Integer></code> 函数式接口的签名。</p> <H3>为什么 Integer.compare 能直接用</H3> <p><strong>Integer.compare(int x, int y)</strong> 是一个静态方法,接收两个 <code>int</code> 参数,返回 <code>int</code>;而 <code>Comparator<Integer>.compare(Integer a, Integer b)</code> 接收两个 <code>Integer</code> 参数,也返回 <code>int</code>。Java 会自动拆箱(<code>Integer → int</code>)并匹配签名,所以 <code>Integer::compare</code> 可被当作 <code>Comparator<Integer></code> 使用。</p> <H3>升序排序写法</H3> <p>对整数流升序排列,最简洁的写法是:</p> <ul> <li><code>list.stream().sorted(Integer::compare).collect(Collectors.toList());</code></li> <li>等价于 <code>list.stream().sorted(Comparator.naturalOrder())</code>,但更底层、更明确</li> <li>无需额外 lambda 或匿名类,语义清晰且性能无损耗</li> </ul> <H3>降序排序怎么处理</H3> <p><strong>Integer.compare</strong> 本身只支持升序逻辑,要降序需稍作转换:</p> <ul> <li>用 <code>Comparator.reverseOrder()</code>: <code>sorted(Comparator.reverseOrder())</code></li> <li>或手动反转比较结果:<code>sorted((a, b) -> Integer.compare(b, a))</code></li> <li>不推荐写 <code>sorted((a, b) -> -Integer.compare(a, b))</code>,负号可能引发整数溢出(虽然对 int 很少见,但语义不清)</li> </ul> <H3>注意 null 安全问题</H3> <p><strong>Integer.compare</strong> 不能处理 <code>null</code> 值 —— 如果流中含 <code>null</code>,调用时会抛 <code>NullPointerException</code>:</p> <ul> <li>若数据可能为 null,改用 <code>Comparator.nullsLast(Integer::compare)</code> 或 <code>Comparator.nullsFirst(Integer::compare)</code></li> <li>例如:<code>sorted(Comparator.nullsLast(Integer::compare))</code> 把 null 放最后</li> <li>原始 <code>Integer::compare</code> 仅适用于确定不含 null 的场景</li> </ul>


















