我正在尝试将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 {名称,年龄->名称+年龄}
这在语法上是正确的,但在返回内容之前我需要一些其他逻辑。出现两个错误消息:
这里不允许“返回”
类型不匹配。必需:单位,找到:字符串
但是我确实想返回一个字符串,并且我也明确声明了它。但是还有什么地方可以得到回报呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在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 表达式直接返回了一个字符串,没有使用额外的变量声明。类型推断会自动处理参数类型,因此无需显式标注 String
和 Int
类型,但为了清晰起见,我在这里保留了类型注解。
另外,请确保你导入了正确的 RxJava 相关库,因为 Observable
和 BiFunction
是RxJava中的类和接口。如果你使用的是 Kotlin 协程或者其他的异步处理库,可能需要调整为对应的 API。