首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >负责任链λ函数

负责任链λ函数
EN

Stack Overflow用户
提问于 2021-01-23 08:07:04
回答 3查看 94关注 0票数 1
代码语言:javascript
复制
@Component
public class UserChain {
 
        @Autowired
        private List<UserChain> userchains;
 
        public User enrichUser(User user) {
                for (UserChain userChain: userchains) {
                        userChain.enrich(user);
                }
                return user;
        }
}

如何将enrichUser方法转换为lambda函数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-23 18:12:09

假设您想将UserChainUser传递给lambda,您可以使用BiFunction函数接口来完成它。

  • 前两种类型是链和用户(要应用的参数)
  • ,第三种类型是返回类型

代码语言:javascript
复制
BiFunction<List<UserChain>, User, User> enrich =
        (uchain, user) -> {
            for (UserChain uch : uchain) {
                uch.enrich(user);
            }
            return user;
        };
User user = ... some user
user = enrich.apply(userchains, user);

如果要直接引用List<UserChain>字段,则为List<UserChain>

可能的替代方法

如果提供的对象是可变的,并且只是更新和返回,那么您可以使用BiConsumer

代码语言:javascript
复制
BiConsumer<List<UserChain>, User> enrich =
        (uchain, u) -> uchain.forEach(uc->uc.enrich(u));
        
enrich.accept(userchains, user); // now user has the enrichments.

如果希望引用(而不是作为参数传递) Consumer,也可以使用List<UserChain>

代码语言:javascript
复制
Consumer<User> enrich = u-> userchains.forEach(uc->uc.enrich(u));
enrich.accept(user);
票数 1
EN

Stack Overflow用户

发布于 2021-01-23 08:35:15

您所拥有的函数以User作为输入,并返回User作为输出。

因此,我们需要一个Function<User, User>类型的对象来存储函数代码。

代码语言:javascript
复制
public class UserChain {

    @Autowired
    private List<UserChain> userchains;
    public Function<User, User> enrichUser = user -> { 
        userchains.forEach(userChain -> userChain.enrich(user));
        return user;
    };
}
票数 1
EN

Stack Overflow用户

发布于 2021-01-23 08:28:28

这就是你要找的吗?

代码语言:javascript
复制
userchains.forEach(uc -> uc.enrich(user));
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65857041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档