groovy: преобразовать список реализации интерфейса в карту с помощью compileStatic

Я просто новичок в groovy.

      @Service
@CompileStatic
@Slf4j
class JourneyExecutionService {

    @Autowired
    List<DecisionEngineService> engineList;

    Map<String, DecisionEngineService> engineMap;
    void init(){
        engineMap = engineList.collectEntries {[it.getIndex(), it]}
        engineMap = engineList.stream().collect(Collectors.toMap(DecisionEngineService.getIndex, Functions.identity()))
    }

Компиляция показывает оба оператора в init сбой функции из-за ошибки:

Cannot assign 'Map<Object, Object>' to 'List<String, DecisionEngineService>' и Cannot resolve symbol 'getIndex'

Второй оператор в стиле потока Java.

Интерфейс интерфейса похож на

      interface DecisionEngineService {

    String getIndex()
}

Может ли кто-нибудь помочь исправить проблему с компиляцией? Спасибо

1 ответ

Достаточно явно указать карту:

      Map<String, DecisionEngineService> engineMap;

void init(){
  engineMap = (Map<String, DecisionEngineService>)engineList.collectEntries {[it.index, it]}
}
Другие вопросы по тегам