开发者社区 问答 正文

将Java转换为包含代码的Kotlin BiFunction

我正在尝试将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 } ) Lambda符号似乎根本不起作用,或者我只是无法弄清楚。我发现Kotlin中BiFunctions的所有示例都直接像这样返回值

BiFunction {名称,年龄->名称+年龄}

这在语法上是正确的,但在返回内容之前我需要一些其他逻辑。出现两个错误消息:

这里不允许“返回”

类型不匹配。必需:单位,找到:字符串

但是我确实想返回一个字符串,并且我也明确声明了它。但是还有什么地方可以得到回报呢?

展开
收起
被纵养的懒猫 2019-10-08 17:19:21 773 分享 版权
阿里云 AI 助理回答

在Kotlin中,BiFunction 的 lambda 表达式应当直接返回结果而不是先赋值给一个局部变量再返回。你的代码试图在 lambda 体内使用传统的声明方式来创建变量并返回,这与 Kotlin 的简洁风格和函数式编程的惯用法不完全相符。

根据你的需求,可以简化为如下形式:

Observable.just("Stacey")
    .zipWith(Observable.just(6), BiFunction { name: String, age: Int ->
        if (age < 10) "$name is a child with age $age"
        else "$name is an adult with age $age"
    })

这里我假设你想基于年龄判断是孩子还是成人,并在字符串中体现这一点。注意,lambda 表达式直接返回了一个字符串,没有使用额外的变量声明。类型推断会自动处理参数类型,因此无需显式标注 StringInt 类型,但为了清晰起见,我在这里保留了类型注解。

另外,请确保你导入了正确的 RxJava 相关库,因为 ObservableBiFunction 是RxJava中的类和接口。如果你使用的是 Kotlin 协程或者其他的异步处理库,可能需要调整为对应的 API。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答