来自列表的参数(不是列表),java,functional-programming,java-stream,functional-interface"/>

首页 > 解决方案 > 如何申请功能来自列表的参数(不是列表)

问题描述

我有一个方法,它返回 company 作为 key 和 listemployerr 作为 values <T> Map<String, List<T>> getUserPerCompany(final Function<User, T> converter)。该方法接受converter在测试中返回字符串(员工的姓名+姓氏)的参数。它应该返回:Map<String, List<String>>. 我创建了这个实现:

return getUserStream().collect(toMap(Company::getName, c -> converter.apply(c.getUsers())));

错误是: apply (domain.User) in Function cannot be applied to (java.util.List<domain.User>)

我的问题是我不知道如何将员工传递给“申请”列表,而不是完整的列表。

我的其他尝试:

标签: javafunctional-programmingjava-streamfunctional-interface

解决方案


我想这就是你要找的

<T> Map<String, List<T>> getUserPerCompany(final Function<User, T> converter) {
    return getUserStream().collect(Collectors.toMap(
            c -> c.getName(),
            c -> c.getUsers()
                  .stream()
                  .map(converter)
                  .collect(Collectors.toList())
    ));
}

用法示例是

final Map<String, List<String>> users = getUserPerCompany(user -> user.getName() + " " + user.getSurname());

基本上你需要map每个User,应用输入Function


推荐阅读