You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将忽略大小写排序对象字段的Comparator类转为Lambda表达式?

简化版

大致思路如下:

list.sort( StringUtils.compareIgnoreCase(o1.getID(), o2.getID()));
详细说明

我想要对一个Thingy对象列表进行排序:

List<Thingy> list = getListOfThingies();

Thingy类包含一个String类型的成员变量,我希望基于该变量进行忽略大小写的排序:

class Thingy {
   private String id;
   public String getId() { return id; }
}

我知道List类有一个.sort方法:

default void sort(Comparator<? super E> c)

在理解该语法后,我编写了一个Comparator<Thingy>实现类:

class MyThingySortComparator implements Comparator<Thingy> {

    @Override
    public int compare(Thingy o1, Thingy o2) {
        String s1 = null;
        String s2 = null;
        if (o1 != null) s1 = o1.getId(); // thingy1可能为null
        if (o2 != null) s2 = o2.getId(); // thingy2可能为null

        //StringUtils可处理字符串为null的情况
        int compareResult = StringUtils.compareIgnoreCase(s1, s2);

        return compareResult;
    }
}

随后我可以用它对列表进行排序:

List<Thingy> list = getListOfThingies();
Comparator<Thingy> myThingySortComparator = new MyThingySortComparator();
list.sort(myThingySortComparator);

该写法可行但过于冗长。

我了解到Lambda表达式可以用一行代码实现相同功能,请问对应的Lambda写法是什么?

调研情况
  • Java 8中使用Lambda对ArrayList排序
  • 使用Lambda Comparator对列表排序
  • 在Java中使用Lambda对来自其他类的对象列表排序
  • 如何使用Lambda表达式基于单个变量对对象列表排序?
  • 在Java中按字段对对象列表排序
  • 对ArrayList进行不区分大小写的字母顺序排序
  • 在Java中使用区分大小写的字符串键对对象排序

内容的提问来源于Stack Exchange,提问作者Ian Boyd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 03:45:39