Java8流无法解析变量

car*_*era 3 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());
            }
        }      
Run Code Online (Sandbox Code Playgroud)

所以我为这段代码改了:

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()));     
Run Code Online (Sandbox Code Playgroud)

但我有这个编译错误:

链无法解决

Era*_*ran 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()); 
Run Code Online (Sandbox Code Playgroud)