我是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()));
但是我有这个编译错误:
链无法解析
答案 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()))