如何使用Java 8流获得每个不同键的第一个值?

Voho

例如:我有一个带有电子邮件的用户对象列表。我想收集具有不同电子邮件的用户列表(因为使用同一电子邮件的两个用户可能是同一个人,所以我不在乎这些差异)。换句话说,对于每个不同的键(电子邮件),我想获取通过该键找到的第一个值(用户),而忽略其余的值。

这是我想出的代码:

public List<User> getUsersToInvite(List<User> users) {
    return users
            .stream()
            // group users by their e-mail
            // the resulting map structure: email -> [user]
            .collect(Collectors.groupingBy(User::getEmail, LinkedHashMap::new, Collectors.toList()))
            // browse each map entry
            .entrySet()
            .stream()
            // get the first user object for each entry
            .map(entry -> entry.getValue().get(0))
            // collect such first entries into a list
            .collect(Collectors.toList());
}

还有一些更优雅的方法吗?

Tunaki

您可以使用Collectors.toMap(keyMapper, valueMapper, mergeFunction),将电子邮件用作键,将用户用作值,并通过始终返回第一个值来忽略键冲突。从中Map,您可以通过调用来吸引用户values()

public List<User> getUsersToInvite(List<User> users) {
    return new ArrayList<>(users.stream()
                                .collect(Collectors.toMap(User::getEmail, 
                                                          Function.identity(), 
                                                          (u1, u2) -> u1))
                                .values());
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获得与其他表不同的内部联接的第一个值

如何使用Java 8流考虑分割字符串的第一个标记

Java 8从Map中的匹配值中提取第一个键

如何使用Simple Html Dom仅获得每个TR的第一个TD?

如何使用Java 8和流将属性值从列表的第一个元素传播到所有列表元素?

我如何获得的第一个元素,同时继续流?

如何使用每个元组的第一个值作为键将六个元组列表连接到 Pandas 数据框中?

如何使用Lead()和Lag()获得第一个非null值

如何在laravel中获得两列值,其中第一个是键,第二个是值?

如何在循环中获取每个数据字典的第一个键

如何从Java 8的迭代器中获取n个第一个值?

如何使用字典中每个键的第一个值有效地创建优先级队列

如何针对每个键删除一些整数后如何从一个映射中收集值并使用流生成另一个映射(Java 8)

如何使用SQL获取列中每个分区的第一个和最后一个值

如何获得财务,全年每个月的第一个和最后一个日期

Java8流-比较两个列表的对象值并将值添加到第一个列表的子对象?

如何获得可观察关系链中第一个可观察值的值

如何获得分组值和重复值的所有“第一个”实例?

返回Java 8流中的第一个匹配项(类似于_.find)

如何对每个循环中的第一个元素执行不同的操作?

使用第一个查询获取每个线程的第一个值并使用该值执行第二个查询

Java的8 - 可选<CustomizedObject>获得内CustomizedObject列表的第一个元素

在Java 8中从第一个流到下一个流api访问对象引用

如何获得第一个非 nan 值的 df?

如何获得第一个下拉值作为无

如何获得Lua中的第一个表值

如何获得多维数组中的第一个厨房图像值

如何获得列表中第一个到某些索引值?

如何在Django模板的字典中获得第一个值?