gpt4 book ai didi

Java 8如何使用Stream检查一个数字是否除以多个数字

转载 作者:行者123 更新时间:2023-11-30 06:06:12 27 4
gpt4 key购买 nike

我如何检查数字的一个范围是否除以多个数字。例如,如果它只有 1 个除数,这将起作用,但我不知道当我有一个数字数组时该怎么做:

int limitNumber = 10;
int onlyOneDivisor = 2;
String input = "2 3";
int[] nums = Arrays.stream(input.split(" ")).mapToInt(Integer::parseInt).toArray();

//这工作正常,但它只除以 2

IntStream.rangeClosed(0, limitNumber).filter(n -> (n % onlyOneDivisor == 0))
.forEach(x -> System.out.print(x + " "));

最佳答案

您可以使用 filter,通过另一个流过滤所有除数,并使用 allMatchanyMatch,具体取决于具体用例:

int max = 10;
int[] divisors = {2, 3, 5};

// no divisor
IntStream.rangeClosed(0, max)
.filter(n -> IntStream.of(divisors).allMatch(d -> n % d != 0))
.forEach(System.out::println);

// any divisor
IntStream.rangeClosed(0, max)
.filter(n -> IntStream.of(divisors).anyMatch(d -> n % d == 0))
.forEach(System.out::println);

如果你想检查一个数字是否恰好有两个除数(给定一个多于两个的列表),你可以使用内部 filter 并将其与 count 结合:

// exactly two divisors
IntStream.rangeClosed(0, max)
.filter(n -> IntStream.of(divisors).filter(d -> n % d == 0).count() == 2)
.forEach(System.out::println);

但是请注意,如果您想找到质数,您可能不应该使用固定的除数列表,而应该根据被测数来确定除数:

IntStream.rangeClosed(0, max)
.filter(n -> IntStream.range(2, n).allMatch(d -> n % d != 0))
.forEach(System.out::println);

(这里使用n作为上界不是很有效;sqrt(n)就够了,而且只有奇数和2,还有很多优化.)

关于Java 8如何使用Stream检查一个数字是否除以多个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44747525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com