我有这个方法:

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));
}

最佳答案

您传递给 FunctionflatMapToLong 需要返回一个 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/

10-11 18:33