如果我有一个 List
包含一些 BigDecimal
对象,是否可以将整个列表强制转换为 List
包含一些 Long
值,而无需对每个 BigDecimal
对象进行迭代?
如果我有一个 List
包含一些 BigDecimal
对象,是否可以将整个列表强制转换为 List
包含一些 Long
值,而无需对每个 BigDecimal
对象进行迭代?
你需要以某种方式进行迭代。如果你想要“隐藏”迭代,你可以使用流(stream):
List<Long> longs = bigs.stream().map(BigDecimal::longValue).collect(Collectors.toList());
但仍将在后台进行一次迭代。
您提到不想迭代两次- 您可以将长整数流保存供以后使用:
LongStream longs = bigs.stream().mapToLong(BigDecimal::longValue);
在收集结果之前,对该流执行其他操作。
如果没有Java 8的流,你可以使用Guava transform:
private List<Long> convertToLongList(List<BigDecimal> bigDecimalList) {
return Lists.transform(bigDecimalList, new Function<BigDecimal, Long>() {
public Long apply(BigDecimal bigDecimal) {
return bigDecimal.longValue();
}
});
}