Java 责任链lambda函数 @组件 公共类用户链{ @自动连线 私有列表用户链; 公共用户enrichUser(用户){ for(UserChain UserChain:userchains){ 丰富(用户); } 返回用户; } }

Java 责任链lambda函数 @组件 公共类用户链{ @自动连线 私有列表用户链; 公共用户enrichUser(用户){ for(UserChain UserChain:userchains){ 丰富(用户); } 返回用户; } },java,lambda,Java,Lambda,如何将enrichUser方法转换为lambda函数?这就是您想要的吗 @Component public class UserChain { @Autowired private List<UserChain> userchains; public User enrichUser(User user) { for (UserChain userChain: userchains) {

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

这就是您想要的吗

@Component
public class UserChain {
 
        @Autowired
        private List<UserChain> userchains;
 
        public User enrichUser(User user) {
                for (UserChain userChain: userchains) {
                        userChain.enrich(user);
                }
                return user;
        }
}

您拥有的函数将
User
作为输入,并将
User
作为输出返回。
因此,我们需要一个
Function
类型的对象来存储函数代码

userchains.forEach(uc -> uc.enrich(user));
公共类用户链{
@自动连线
私有列表用户链;
公共函数enrichUser=user->{
userchains.forEach(userChain->userChain.enrich(user));
返回用户;
};
}

假设您想将
用户链
用户
传递给lambda,您可以使用
双功能
功能界面来完成

  • 前两种类型是链和用户(要应用的参数)
  • 第三种是返回类型
如果要引用(而不是作为参数传递)
列表
,也可以使用
使用者

Consumer-rich=u->userchains.forEach(uc->uc.rich(u));
充实、接受(用户);

您所说的“转换为lambda函数”到底是什么意思?请提供一个示例,至少是伪代码,说明您的想法。这似乎与他想要的不太匹配,但如果是,您可以将其简化为
forEach(UserChain::rich)
。他明确请求lambda,而不是方法引用。这就是为什么我贴出这样的答案@chrylis-谨慎的光学-我认为这两种都不符合要求。OP希望将
enrichUser
方法转换为
lambda
。这些要求方法仍然存在。@WJS确定。我认为他指的是内容/当前实施。如果情况并非如此,他必须将其声明为函数,如Anmol的回复中所述,而此代码可能会回答问题,提供有关此代码回答问题的原因和/或如何提高其长期价值的附加上下文。问题是将函数转换为lambda。还需要什么其他背景?这是一个相当简单的问题。请通过编辑将所有这些解释添加到您的答案中。请记住,其他人应该能够从你的答案中学习,但他们不理解需要什么其他解释。请随意编辑答案并添加你认为缺少的任何内容。
public class UserChain {

    @Autowired
    private List<UserChain> userchains;
    public Function<User, User> enrichUser = user -> { 
        userchains.forEach(userChain -> userChain.enrich(user));
        return user;
    };
}
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);
BiConsumer<List<UserChain>, User> enrich =
        (uchain, u) -> uchain.forEach(uc->uc.enrich(u));
        
enrich.accept(userchains, user); // now user has the enrichments.

Consumer<User> enrich = u-> userchains.forEach(uc->uc.enrich(u));
enrich.accept(user);