Java8新特性——lambda表达式.(案例:完全数分类)

时间:2023-03-09 19:29:36
Java8新特性——lambda表达式.(案例:完全数分类)

需求:输入一个数,判断其类型(完全数,过剩数,不足数)

完全数:自身之外所有因数和==自身

过剩数:自身之外所有因数和>自身

不足数:自身之外所有因数和<自身

 package cn._3.numberclassifier;

 //BEGIN number_classifier_java8
import java.util.List;
import java.util.stream.IntStream; import static java.lang.Math.sqrt;
import static java.util.stream.Collectors.toList;
import static java.util.stream.IntStream.range; public class NumberClassifier { // BEGIN java8_filter
public static IntStream factorsOf(int number) {
return range(, number + ).filter(potential -> number % potential == );
}
// END java8_filter
public static int aliquotSum(int number) {
return factorsOf(number).sum() - number;
}
public static boolean isPerfect(int number) {
return aliquotSum(number) == number;
}
public static boolean isAbundant(int number) {
return aliquotSum(number) > number;
}
public static boolean isDeficient(int number) {
return aliquotSum(number) < number;
}
// END number_classifier_java8 // BEGIN java8_filter_fast
public static List<Integer> fastFactorsOf(int number) {
List<Integer> factors = range(, (int) (sqrt(number) + ))
.filter(potential -> number % potential == ).boxed()// 返回stream<Integer>
.collect(toList());// 折叠/化约,reduce
List<Integer> factorsAboveSqrt = factors.stream().map(e -> number / e).collect(toList());
factors.addAll(factorsAboveSqrt);
//将stream变为ArrayList
return factors.stream().distinct().collect(toList());
}
// END java8_filter_fast
}

测试类:

 package cn._3.numberclassifier;

 public class Mmain {

     public static void main(String[] args) {
Integer number = ;
System.out.println(NumberClassifier.isPerfect(number)+","+NumberClassifier.isAbundant(number)+","+NumberClassifier.isDeficient(number));
}
}