ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-如何在列表(而不是列表)中的函数参数中应用

2019-12-11 03:04:29  阅读:284  来源: 互联网

标签:functional-interface java-stream java functional-programming


我有一种方法可以将公司作为键,并将员工列表作为值
< T> Map< String,List< T>> getUserPerCompany(最终功能<用户,T>转换器).
该方法接受转换器参数,该参数在测试中返回字符串(员工的姓氏).它应该返回:Map< String,List< String>>.我创建了此实现:

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

错误是:
无法将功能中的apply(domain.User)应用于(java.util.List< domain.User>)

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

我的其他尝试:

>返回getUserStream().collect(toMap(Company :: getName,c-> converter.apply((User)c.getUsers().listIterator())));
>返回getUserStream().collect(toMap(Company :: getName,c-> converter.apply((User)c.getUsers().subList(0,c.getUsers().size())))));
>返回getUserStream().collect(toMap(Company :: getName,c-> converter.apply((User)c.getUsers().iterator())));

解决方法:

我想这就是您要寻找的

<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());

基本上,您需要使用输入功能来映射每个用户.

标签:functional-interface,java-stream,java,functional-programming
来源: https://codeday.me/bug/20191211/2105949.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有