我有这个方法:
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 线上,它给出了这个错误
当我把它改成
flatMapToLong(x -> x)
我收到这个错误
唯一有效的是这个
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));
}
最佳答案
您传递给 Function
的 flatMapToLong
需要返回一个 LongStream
:
return list
.stream()
.map(l -> toDigits(l))
.flatMapToLong(x -> x.stream().mapToLong(l -> l))
.sum();
如果需要,您还可以拆分
flatMapToLong
:return list
.stream()
.map(ClassOfToDigits::toDigits)
.flatMap(List::stream)
.mapToLong(Long::longValue)
.sum();
关于java - 如何 flatMapToLong Stream<List<Long>>?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26970652/