哦,这些棘手的Java 8流与lambdas。他们是非常强大的,但是错综复杂的需要一点包围它的头。
假设我有一个带有属性User.getName()的User类型。假设我有这些用户的地图Map< String,User>与名称相关联(例如登录用户名)。我们进一步说,我有一个比较器UserNameComparator.INSTANCE的实例来排序用户名(也许与花哨的归类器等)。
那么如何获取地图中的用户列表,按用户名排序?我可以忽略地图键,并做到这一点:
return userMap.values()
.stream()
.sorted((u1, u2) -> {
return UserNameComparator.INSTANCE.compare(u1.getName(), u2.getName());
})
.collect(Collectors.toList());
但是我必须提取名称以使用UserNameComparator.INSTANCE的行似乎是太多的手动工作。有没有办法我可以简单地提供User :: getName作为一些映射函数,只是为了排序,并仍然收到用户实例回收在列表中?
奖金:如果我想排序的东西是两个级别的深度,如User.getProfile()。getUsername()?