Java8流无法解析变量

时间:2018-11-26 08:51:34

标签: java java-8 java-stream

我是Java8的新手,我想重构这段代码并将其转换为更具Java8风格的

for (RestaurantAddressee RestaurantAddressee : consultationRestaurant.getAddressees()) {
            Chain chain = chainRestService.getClient().getChainDetails(getTDKUser(), RestaurantAddressee.getChain().getId());
            if (chain.getOrganisation().getId().equalsIgnoreCase(event.getOrganisationId())) {
                chainIds.add(restaurantAddressee.getChain().getId());
            }
        }      

所以我将其更改为以下代码:

consultationRestaurant.getAddressees()
        .stream()
        .map( ma -> chainRestService.getClient().getChainDetails(getTDKUser(), ma.getChain().getId()))
        .filter(chain -> chain.getOrganisation().getId().equalsIgnoreCase(event.getOrganisationId()))
        .forEach(chainIds.add(chain.getId()));     

但是我有这个编译错误:

链无法解析

2 个答案:

答案 0 :(得分:6)

您忘记在forEach调用中指定lambda表达式参数。

也就是说,您不应使用forEach向集合中添加元素。使用collect

List<String> chainIds =
    consultationRestaurant.getAddressees()
        .stream()
        .map( ma -> chainRestService.getClient().getChainDetails(getTDKUser(), ma.getChain().getId()))
        .filter(chain -> chain.getOrganisation().getId().equalsIgnoreCase(event.getOrganisationId()))
        .map(Chain::getId)
        .collect(Collectors.toList()); 

答案 1 :(得分:0)

这里。您的循环定义:

Chain chain = chainRestService.getClient()...

但是您的流语句只是错过了定义该变量的机会。

因此:在需要该变量的地方,您必须提供例如参数:

filter(chain -> chain.getOrganisation().getId().equalsIgnoreCase(event.getOrganisationId()))