我有这个方法:
public static long sumDigits(final List<Long> list) {
return list
.stream()
.map(l -> toDigits(l))
.flatMapToLong(x -> x.stream())
.sum()
}
toDigits有这个签名:
List<Long> toDigits(long l)
在flatMapToLong行上,它会出现此错误
类型不匹配:无法转换为Stream&lt;长&gt;到LongStream
当我将其更改为
时flatMapToLong(x -> x)
我收到此错误
类型不匹配:无法从List&lt;转换长&gt;到LongStream
唯一有效的是这个
public static long sumDigits(final List<Long> list) {
return list
.stream()
.map(l -> toDigits(l))
.flatMap(x -> x.stream())
.reduce(0L, (accumulator, add) -> Math.addExact(accumulator, add));
}
答案 0 :(得分:9)
您传递给Function
的{{1}}需要返回flatMapToLong
:
LongStream
如果您愿意,也可以拆分return list
.stream()
.map(l -> toDigits(l))
.flatMapToLong(x -> x.stream().mapToLong(l -> l))
.sum();
:
flatMapToLong
答案 1 :(得分:0)
这似乎可行:
public static long sumDigits(final List<Long> list) {
return list.stream().mapToLong(l -> l).sum();
}