编写一个函数接口,其中有一个找出所有素数的抽象方法。再编写一个类,类中只有一个方法,找出给定范围内所有的素数。请使用Lambda表达式函数引用的方法,完成找出10000内所有的素数并每行输出10个素数。
时间: 2024-02-09 15:10:17 浏览: 29
好的,我理解了你的要求。下面是对应的Java代码:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.function.IntPredicate;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class PrimeNumberFinder {
public interface PrimeNumberChecker {
boolean isPrime(int n);
}
public static List<Integer> findPrimeNumbers(int start, int end, PrimeNumberChecker checker) {
List<Integer> primes = new ArrayList<>();
for (int i = start; i <= end; i++) {
if (checker.isPrime(i)) {
primes.add(i);
}
}
return primes;
}
public static void main(String[] args) {
List<Integer> primes = findPrimeNumbers(2, 10000, n -> {
if (n <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
});
List<String> lines = IntStream.range(0, primes.size())
.mapToObj(i -> primes.get(i))
.map(n -> Integer.toString(n))
.collect(Collectors.groupingBy(n -> n.length() / 4))
.entrySet().stream()
.sorted((e1, e2) -> Integer.compare(e1.getKey(), e2.getKey()))
.flatMap(e -> e.getValue().stream())
.collect(Collectors.toList());
for (int i = 0; i < lines.size(); i += 10) {
int j = Math.min(i + 10, lines.size());
System.out.println(lines.subList(i, j).stream().collect(Collectors.joining("\t")));
}
}
}
```
这个程序的核心是 `PrimeNumberFinder` 类中的 `findPrimeNumbers` 方法,它使用了一个函数式接口 `PrimeNumberChecker`,它只有一个 `isPrime` 方法,用于判断一个数是否是素数。在 `main` 方法中,我们传入了一个 Lambda 表达式,它实现了 `isPrime` 方法。
在 `main` 方法中,我们使用 `findPrimeNumbers` 找出了 2 到 10000 之间的所有素数,并把它们存储在一个 `List<Integer>` 中。然后,我们把这个 `List` 转换成了一个 `List<String>`,每个字符串都代表一个素数。我们把这些字符串按照长度分组,并按照长度从小到大排序。最后,我们把这些字符串按照每行10个的方式分行输出。
注意,为了使输出看起来更整齐,我们在输出每个素数的时候,把它们转换成了字符串,并且在每个字符串之间加上了一个制表符。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)