是否可以使用选项为不同的Java类型返回第一个NOTNULL值? String myFunction(可选instanceWithIdAsString,可选instanceWithIdAsLong){ String resultId=InstanceWithIDassString.map(ClassWithIDassString::getId) .map(id->String.valueOf(id)) .OrelGet(t->InstanceWithidSlong .map(ClassWithIdAsLong::getId)); 返回结果TID; }
上面的代码没有编译。。。我收到: 方法引用中的返回类型错误:无法转换java.lang.String 对你 在编写过程中: 不兼容类型:lambda表达式中的参数类型不兼容 在上述名称中,Long是指长包装类。是否可以使用选项为不同的Java类型返回第一个NOTNULL值? String myFunction(可选instanceWithIdAsString,可选instanceWithIdAsLong){ String resultId=InstanceWithIDassString.map(ClassWithIDassString::getId) .map(id->String.valueOf(id)) .OrelGet(t->InstanceWithidSlong .map(ClassWithIdAsLong::getId)); 返回结果TID; },java,java-8,optional,Java,Java 8,Optional,上面的代码没有编译。。。我收到: 方法引用中的返回类型错误:无法转换java.lang.String 对你 在编写过程中: 不兼容类型:lambda表达式中的参数类型不兼容 在上述名称中,Long是指长包装类。 我做了大量的研究,没有发现任何类似的东西,只是希望能找到一些解决办法。使上述id的类型相同对我来说不是一个选项。问题在于您最后一次调用orElse子句内部可选的map()。因为它是一个可选的字符串,orElse应该返回一个字符串,但在它里面您返回一个可选的字符串 String myFun
我做了大量的研究,没有发现任何类似的东西,只是希望能找到一些解决办法。使上述id的类型相同对我来说不是一个选项。问题在于您最后一次调用orElse子句内部可选的map()。因为它是一个可选的字符串,orElse应该返回一个字符串,但在它里面您返回一个可选的字符串
String myFunction(Optional<ClassWithIdAsString> instanceWithIdAsString, Optional<ClassWithIdAsLong> instanceWithIdAsLong) {
String resultId = instanceWithIdAsString.map(ClassWithIdAsString::getId)
.map(id -> String.valueOf(id))
.orElseGet(t -> instanceWithIdAsLong
.map(ClassWithIdAsLong::getId));
return resultId;
}
ClassWithIdAsString::getId是否将字符串作为ID返回,ClassWithIdAsLong::getId是否将字符串作为ID返回
如果是,则必须反过来:
String id = instanceWithIdAsString.map(ClassWithIdAsString::getId)
.map(id -> String.valueOf(id))
.orElseGet(() -> instanceWithIdAsLong
.map(ClassWithIdAsLong::getId).orElse(""));
在这种情况下,如果两个实例都为null,则返回“”
我希望这对你没问题
我希望这能起作用。您的代码有一些问题:
id
作为map
操作的变量,因为它已在封闭范围内声明orElseGet
采用a,但是您正在执行的t->…
不满足供应商
功能接口的功能描述符orElseGet
中的map
操作当前返回的是可选的,而不是字符串
map(classWithIDassString::getId)
返回一个可选的,那么在随后调用.map(id->String.valueOf(id))
时调用String.valueOf是多余的(事实上,您根本不需要此操作),并且仅由于重载valueOf(Object obj)而工作
String id = instanceWithIdAsString.map(ClassWithIdAsLong::getId)
.map(id -> String.valueOf(id))
.orElseGet(() -> instanceWithIdAsLong
.map(ClassWithIdAsString::getId).orElse(""));
当您使用
.map
时,流处理map返回值,因此您将实体传递到map并映射到String
,然后处理字符串。我认为最好在myFunction
方法中返回Optional
而不是String
。谢谢!它起作用了。作为使用工作代码的第一个答案,我会接受。谢谢你的回答,但在使用代码的第一个答案之后,我现在明白你的确切意思了。
String id = instanceWithIdAsString
.map(ClassWithIdAsString::getId)
.orElseGet(() -> String.valueOf(instanceWithIdAsLong
.map(ClassWithIdAsLong::getId)
.orElse(-1)));