mrt*_*181 3 java collections lambda java-stream flatmap
我有这个方法:
public static long sumDigits(final List<Long> list) {
return list
.stream()
.map(l -> toDigits(l))
.flatMapToLong(x -> x.stream())
.sum()
}
Run Code Online (Sandbox Code Playgroud)
toDigits有这个签名:
List<Long> toDigits(long l)
Run Code Online (Sandbox Code Playgroud)
在flatMapToLong行上,它给出了这个错误
类型不匹配:无法从Stream <Long>转换为LongStream
当我改为
flatMapToLong(x -> x)
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
类型不匹配:无法从List <Long>转换为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));
}
Run Code Online (Sandbox Code Playgroud)
该Function
传递给flatMapToLong
需要返回LongStream
:
return list
.stream()
.map(l -> toDigits(l))
.flatMapToLong(x -> x.stream().mapToLong(l -> l))
.sum();
Run Code Online (Sandbox Code Playgroud)
您也可以根据需要拆分flatMapToLong
:
return list
.stream()
.map(ClassOfToDigits::toDigits)
.flatMap(List::stream)
.mapToLong(Long::longValue)
.sum();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3651 次 |
最近记录: |