如果我有List
个BigDecimal
个对象,是否可以将整个列表强制转换为List
Long
个值,而不必遍历每个BigDecimal
embed
1}}对象?
答案 0 :(得分:5)
您需要以某种方式进行迭代。如果你想"隐藏"迭代,您可以使用流:
List<Long> longs = bigs.stream().map(BigDecimal::longValue).collect(Collectors.toList());
但是后台仍然会有一个迭代。
你提到你不想迭代两次 - 你可以保存多头流以供以后使用:
LongStream longs = bigs.stream().mapToLong(BigDecimal::longValue);
在收集结果之前对该流应用其他操作。
答案 1 :(得分:0)
如果没有Java 8流,则可以使用guava转换:
private List<Long> convertToLongList(List<BigDecimal> bigDecimalList) {
return Lists.transform(bigDecimalList, new Function<BigDecimal, Long>() {
public Long apply(BigDecimal bigDecimal) {
return bigDecimal.longValue();
}
});
}