如何将忽略大小写排序对象字段的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
相关产品推荐
相关产品推荐

