如何使用Lambda关闭所有MessageListenerContainer

时间:2017-11-03 21:30:14

标签: java lambda functional-programming

简而言之,我试图用lambda语法编写这个:

bean = context.getBean(JmsListenerEndpointRegistry.class);
for (MessageListenerContainer listenerContainer : bean.getListenerContainers()) {
    DefaultMessageListenerContainer container = (DefaultMessageListenerContainer) listenerContainer;
    container.shutdown();
}

这是我的尝试,这个Lambda代码出了什么问题?

context.getBean(JmsListenerEndpointRegistry.class).getListenerContainers()
                  .forEach(DefaultMessageListenerContainer::shutdown());

1 个答案:

答案 0 :(得分:1)

您已关闭,但您需要首先使用map将所有项目转换为类型DefaultMessageListenerContainer,然后您可以迭代蒸汽的每个元素并调用其shutdown方法。

bean = context.getBean(JmsListenerEndpointRegistry.class);
bean.getListenerContainers().stream().map(e -> (DefaultMessageListenerContainer)e)
                    .forEach(DefaultMessageListenerContainer::shutdown);

此外,使用方法引用时,不能在方法名称后使用括号()