calculating factorial using Java 8 IntStream?

前端 未结 4 1798
南笙
南笙 2021-01-15 12:00

I am relatively new in Java 8 and lambda expressions as well as Stream, i can calculate factorial using for loop or recursion. But is there a way t

4条回答
  •  自闭症患者
    2021-01-15 12:50

    With LongStream.range() you can calculate factorial for number less 20. If you need calculate for larger number create stream with BigInteger:

     public BigInteger factorial(int number) {
        if (number < 20) {
            return BigInteger.valueOf(
                    LongStream.range(1, number + 1).reduce((previous, current) -> previous * current).getAsLong()
            );
        } else {
            BigInteger result = factorial(19);
            return result.multiply(Stream.iterate(BigInteger.valueOf(20), i -> i.add(BigInteger.ONE)).limit(number - 19)
                    .reduce((previous, current) -> previous.multiply(current)).get()
            );
        }
    }
    

提交回复
热议问题