Nab*_*ham 46 sorting lambda list java-8
完成这项工作的最简洁方法是什么?
class AnObject{
Long attr;
}
List<AnObject> list;
Run Code Online (Sandbox Code Playgroud)
我知道可以使用AnObject的自定义比较器来完成.对于这种情况,是不是有一些现成的东西?的种类
Collections.sort(list, X.attr ) ;
Run Code Online (Sandbox Code Playgroud)
JB *_*zet 119
假设你真的有一个List<AnObject>,你需要的只是
list.sort(Comparator.comparing(a -> a.attr));
Run Code Online (Sandbox Code Playgroud)
如果通过不使用公共字段而不是使用访问器方法来使代码清理,则它变得更加清晰:
list.sort(Comparator.comparing(AnObject::getAttr));
Run Code Online (Sandbox Code Playgroud)
Ale*_*lex 13
作为@JB Nizet答案的补充,如果你的attr可以为空,
list.sort(Comparator.comparing(AnObject::getAttr));
Run Code Online (Sandbox Code Playgroud)
可能会抛出NPE.
如果您还想对空值进行排序,可以考虑
list.sort(Comparator.comparing(a -> a.attr, Comparator.nullsFirst(Comparator.naturalOrder())));
Run Code Online (Sandbox Code Playgroud)
要么
list.sort(Comparator.comparing(a -> a.attr, Comparator.nullsLast(Comparator.naturalOrder())));
Run Code Online (Sandbox Code Playgroud)
这将把空值放在第一位或最后一位.
小智 10
上面 JB Nizet 和 Alex 的回答的空安全选项是执行以下操作:
list.sort(Comparator.comparing(AnObject::getAttr, Comparator.nullsFirst(Comparator.naturalOrder())));
Run Code Online (Sandbox Code Playgroud)
或者
list.sort(Comparator.comparing(AnObject::getAttr, Comparator.nullsLast(Comparator.naturalOrder())));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51366 次 |
| 最近记录: |