@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函数?
发布于 2021-01-23 18:12:09
假设您想将UserChain和User传递给lambda,您可以使用BiFunction函数接口来完成它。
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。
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>。
Consumer<User> enrich = u-> userchains.forEach(uc->uc.enrich(u));
enrich.accept(user);发布于 2021-01-23 08:35:15
您所拥有的函数以User作为输入,并返回User作为输出。
因此,我们需要一个Function<User, User>类型的对象来存储函数代码。
public class UserChain {
@Autowired
private List<UserChain> userchains;
public Function<User, User> enrichUser = user -> {
userchains.forEach(userChain -> userChain.enrich(user));
return user;
};
}发布于 2021-01-23 08:28:28
这就是你要找的吗?
userchains.forEach(uc -> uc.enrich(user));https://stackoverflow.com/questions/65857041
复制相似问题