Поток Java8 не может разрешить переменную - PullRequest
0 голосов
/ 26 ноября 2018

Я новичок в 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 голосов
/ 26 ноября 2018

Здесь.Ваш цикл определяет:

Chain chain = chainRestService.getClient()...

Но ваш оператор потока просто не может определить эту переменную.

Итак: в местах, где нужна эта переменная, вы должны предоставить, например, в качестве параметра:

filter(chain -> chain.getOrganisation().getId().equalsIgnoreCase(event.getOrganisationId()))
0 голосов
/ 26 ноября 2018

Вы забыли указать параметр лямбда-выражения в вызове forEach.

При этом не следует использовать 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()); 
...