【发布时间】:2014-12-21 12:13:58
【问题描述】:
哦,那些带有 lambda 的棘手 Java 8 流。它们非常强大,但错综复杂的东西需要一点时间才能将其全部包含在标题中。
假设我有一个User 类型,其属性为User.getName()。假设我有一张与名称相关联的用户 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 实例返回到收集的列表中?
奖励:如果我想要排序的内容有两个层次,例如User.getProfile().getUsername(),该怎么办?
【问题讨论】:
标签: java sorting lambda java-8 java-stream