将 Optional<Integer> 转换为 Optional<Long> 的好方法
Good way to convert Optional<Integer> to Optional<Long>
我正在尝试找到一种干净且代码高效的方法来将 Optional<Integer>
转换为 Optional<Long>
。我在 Java 7 中使用 Guava 工作。
所以在代码的一个地方我创建了一个可选的整数
Optional<Integer> optionalInt = Optional.fromNullable(someInt);
在另一个领域我需要它作为一个可选的 long。
我能想到的最好的事情是:
Optional<Long> optionalLong = optionalInt.transform(new Function<Integer, Long>() {
@Override
public Long apply(Integer inputInt) {
if (inputInt != null)
return inputInt.longValue();
else
return null;
}
});
但这很麻烦,尤其是考虑到当我使用原始类型时转换类型是多么容易。
有什么好主意吗?
TL;DR: 在 Java 7, No.
遗憾的是,这是最好的 Java 7 在功能支持方面必须提供的。
我只想说 transform
永远不会用 null
调用,所以你可以这样做:
Optional<Long> optionalLong = optionalInt.transform(new Function<Integer, Long>() {
@Override
public Long apply(Integer inputInt) {
return inputInt.longValue();
}
});
If the instance is present, it is transformed with the given
Function
; otherwise, absent()
is returned. If the function returns
null
, a NullPointerException
is thrown.
所以从来没有 return null
从 Function
传递给 transform
.
如果你经常重复使用它,那么你可以使用 enum
单例模式:
public enum IntToLong implements Function<Integer, Long> {
INSTANCE;
@Override
public Long apply(Integer input) {
return input.longValue();
}
}
然后:
optionalInt.transform(IntToLong.INSTANCE);
这显然减少了调用站点的代码,但代价是在代码库中增加了额外的 类 - 我不太担心这一点。
接近演员表:
Optional<Long> optionalLong = Optional.fromNullable(optionalInt.isPresent() ?
optionalInt.get().longValue() : null);
基本上这避免了调用转换的开销。调用 isPresent 可以简化为直接检查 null 值。
我正在尝试找到一种干净且代码高效的方法来将 Optional<Integer>
转换为 Optional<Long>
。我在 Java 7 中使用 Guava 工作。
所以在代码的一个地方我创建了一个可选的整数
Optional<Integer> optionalInt = Optional.fromNullable(someInt);
在另一个领域我需要它作为一个可选的 long。 我能想到的最好的事情是:
Optional<Long> optionalLong = optionalInt.transform(new Function<Integer, Long>() {
@Override
public Long apply(Integer inputInt) {
if (inputInt != null)
return inputInt.longValue();
else
return null;
}
});
但这很麻烦,尤其是考虑到当我使用原始类型时转换类型是多么容易。
有什么好主意吗?
TL;DR: 在 Java 7, No.
遗憾的是,这是最好的 Java 7 在功能支持方面必须提供的。
我只想说 transform
永远不会用 null
调用,所以你可以这样做:
Optional<Long> optionalLong = optionalInt.transform(new Function<Integer, Long>() {
@Override
public Long apply(Integer inputInt) {
return inputInt.longValue();
}
});
If the instance is present, it is transformed with the given
Function
; otherwise,absent()
is returned. If the function returnsnull
, aNullPointerException
is thrown.
所以从来没有 return null
从 Function
传递给 transform
.
如果你经常重复使用它,那么你可以使用 enum
单例模式:
public enum IntToLong implements Function<Integer, Long> {
INSTANCE;
@Override
public Long apply(Integer input) {
return input.longValue();
}
}
然后:
optionalInt.transform(IntToLong.INSTANCE);
这显然减少了调用站点的代码,但代价是在代码库中增加了额外的 类 - 我不太担心这一点。
接近演员表:
Optional<Long> optionalLong = Optional.fromNullable(optionalInt.isPresent() ?
optionalInt.get().longValue() : null);
基本上这避免了调用转换的开销。调用 isPresent 可以简化为直接检查 null 值。