Конвертировать Java в Kotlin BiFunction, содержащую код - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь преобразовать свой класс Java в Kotlin. Это код Java:

Observable.just("Stacey")
    .zipWith(Observable.just(6),
    (name, age) -> {
        String text;
        if(age < 18){
            text = name + " is a child";
        }else{
            text = name + "is not a child";
        }
        return text;
    }
);

И вот что я преобразовал в:

Observable.just("Stacey")
.zipWith(Observable.just(6),
    BiFunction<String, Int, String> {name, age ->
        var text: String
        if(age < 18){
            text = "$name + is a child"
        }else{
            text = "$name + is not a child"
        }
        return text
    }
)

Кажется, что лямбда-нотация не работает вообще, или я просто не могу понять это. Все примеры для BiFunctions в Kotlin, которые я нашел, возвращают значение, подобное этому

BiFunction {name, age -> name + age}

, что является синтаксически правильным, но янужна дополнительная логика, прежде чем я что-то верну. Появляются два сообщения об ошибке:

  • «возврат» здесь не разрешен

  • Несоответствие типов. Требуется: Единица, Найдено: Строка

Но я хочу вернуть строку, и я также явно объявил ее. Но где еще можно поставить возврат?

1 Ответ

1 голос
/ 08 октября 2019

У меня тоже была эта проблема, все, что вам нужно сделать, это заменить текст возврата на return @ BiFunction text

Для объяснения вы можете посмотреть здесь:

Котлин: Что значит «вернуть @»?

https://tutorialwing.com/labeled-return-or-return-in-kotlin-with-example

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...