java - 如何将 Stream<List<Long>> flatMapToLong?

标签 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()
}

toDigits 有这个签名:

List<Long> toDigits(long l)

在 flatMapToLong 行给出了这个错误

Type mismatch: cannot convert from Stream< Long > to LongStream

当我把它改成

flatMapToLong(x -> x)

我收到这个错误

Type mismatch: cannot convert from List< Long > to 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));
}

最佳答案

您传递给 flatMapToLongFunction 需要返回一个 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 - 如何将 Stream<List<Long>> flatMapToLong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26970652/

相关文章:

java - 为什么要设置插入项目为ordered?

java - 如何将此源代码转换为 lambda?

Java 仅重绘所有其他猜测

Java:如何使用 java jdbc for Sql Server 使用标识列执行批量插入

java - 无法读取Firebase数据库,数据返回null

java - 在不丢失第一个排序顺序的情况下进行子排序?

java - 如何将仅获取选定的子实体与父实体连接起来

java - 从最终类中获取所有静态字符串值作为字符串数组或列表

Java 8 Stream API 相当于嵌套 for 循环

linq - 使用 lambda 选择类(class)中的最佳成绩