Как использовать лямбда-выражение в скрипте groovy?

Я пытаюсь написать код скрипта groovy, но обнаружил, что скрипт groovy не поддерживает лямбда-выражения. Может ли кто-нибудь помочь мне преобразовать этот фрагмент кода, чтобы он работал и для скрипта groovy?

        if (CollectionUtils.isNotEmpty(orderModel.getFreeProductSets())){
        orderModel.getFreeProductSets().forEach(orderFreeProductSetModel -> {
            if (CollectionUtils.isNotEmpty(orderFreeProductSetModel.getFreeProducts())){
                modelService.removeAll(orderFreeProductSetModel.getFreeProducts());
            }
            else{
                System.out.println("no entry found for orderFreeProductSetModel");
            }
        });
        modelService.removeAll(orderModel.getFreeProductSets());
    }
    else{
        System.out.println("FreeProductSets is empty");
    }

Спасибо.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать что-то вроде этого:

if (CollectionUtils.isNotEmpty(orderModel.getFreeProductSets())) {
    orderModel.getFreeProductSets().each{ orderFreeProductSetModel ->
        if (CollectionUtils.isNotEmpty(orderFreeProductSetModel.getFreeProducts())) {
            modelService.removeAll(orderFreeProductSetModel.getFreeProducts());
        } else {
            System.out.println("no entry found for orderFreeProductSetModel");
        }
    };
    modelService.removeAll(orderModel.getFreeProductSets());
} else {
    System.out.println("FreeProductSets is empty");
}

Вам просто нужно было использовать foreach{} вместо foreach()

Не могли бы вы уточнить?

KuzoKaazi 05.12.2022 13:50

Это просто синтаксис groovy, вам нужно использовать foreach{it->..} или each {it->..} вместо foreach(it->.) в синтаксисе java

Benkerroum Mohamed 05.12.2022 13:58

ВСЕ ЕЩЕ ОШИБКА: ИСКЛЮЧЕНИЕ: Сбой компиляции скрипта [причина: org.codehaus.groovy.control.MultipleCompilationErrorsExcepti‌​on: сбой при запуске: Script78.groovy: 20: неоднозначное выражение может быть либо выражением закрытия без параметров, либо изолированным блоком открытого кода ; решение: добавьте явный список параметров закрытия, например. {it -> ...} или заставить его рассматриваться как открытый блок, назначив ему метку, например. L:{...} @ строка 20, столбец 75. { orderFreeProductSetModel -> { ^ 1 ошибка ]

KuzoKaazi 05.12.2022 14:02

Я обновил скрипт, попробуйте еще раз

Benkerroum Mohamed 05.12.2022 14:07

Большое спасибо :) Теперь работает нормально. Скажите, пожалуйста, какую ошибку я совершил?

KuzoKaazi 05.12.2022 14:11

Вам нужно было использовать orderModel.getFreeProductSets().forEach{ orderFreeProductSetModel -> ..} вместо orderModel.getFreeProductSets().forEach(orderFreeProductSetM‌​odel -> {}), у вас просто была ошибка в синтаксисе

Benkerroum Mohamed 05.12.2022 14:13

Другие вопросы по теме