我现在正在使用 Optional,我必须从 findFirst() 方法返回一个 String。我知道 findFirst 返回一个 Optional 但我想返回一个 Optional<String>
就像在方法签名中一样。
@Override
public Optional<String> findBetweenMinAgeAndMaxAge(int kidAge, String id) {
String query = buildFindRoomByKidAge();
JsonObject params = JsonObject.create()
.put(JAVA_TYPE_PARAM, ShipRoom.class.getName())
.put(ID_PARAM, id)
.put(KID_AGE_PARAM, kidAge);
N1qlQuery queryWithParameter = N1qlQuery.parameterized(query, params);
return template.findByN1QLProjection(queryWithParameter, Room.class)
.stream()
.findFirst();
}
有什么复杂的方法可以实现这一点吗?
我做了下一个:
@Override
public Optional<String> findBetweenMinAgeAndMaxAge(int kidAge, String id) {
String query = buildFindRoomByKidAge();
JsonObject params = JsonObject.create()
.put(JAVA_TYPE_PARAM, ShipRoom.class.getName())
.put(ID_PARAM, id)
.put(KID_AGE_PARAM, kidAge);
N1qlQuery queryWithParameter = N1qlQuery.parameterized(query, params);
return Optional.ofNullable(template.findByN1QLProjection(queryWithParameter, Room.class)
.stream()
.findFirst().get().getId());
}
但我认为应该有更好的解决方案。有什么建议吗?
谢谢!
最佳答案
使用Optional.map()
:
return template.findByN1QLProjection(queryWithParameter, Room.class)
.stream()
.findFirst()
.map(Room::getId)
map()
接受一个函数,如果可选值中存在值,则返回结果。
关于Java 从 findFirst() 返回一个 Optional<String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57911804/