首页 > 代码库 > Java8新特性——lambda表达式.(案例:完全数分类)
Java8新特性——lambda表达式.(案例:完全数分类)
需求:输入一个数,判断其类型(完全数,过剩数,不足数)
完全数:自身之外所有因数和==自身
过剩数:自身之外所有因数和>自身
不足数:自身之外所有因数和<自身
1 package cn._3.numberclassifier; 2 3 //BEGIN number_classifier_java8 4 import java.util.List; 5 import java.util.stream.IntStream; 6 7 import static java.lang.Math.sqrt; 8 import static java.util.stream.Collectors.toList; 9 import static java.util.stream.IntStream.range; 10 11 public class NumberClassifier { 12 13 // BEGIN java8_filter 14 public static IntStream factorsOf(int number) { 15 return range(1, number + 1).filter(potential -> number % potential == 0); 16 } 17 // END java8_filter 18 public static int aliquotSum(int number) { 19 return factorsOf(number).sum() - number; 20 } 21 public static boolean isPerfect(int number) { 22 return aliquotSum(number) == number; 23 } 24 public static boolean isAbundant(int number) { 25 return aliquotSum(number) > number; 26 } 27 public static boolean isDeficient(int number) { 28 return aliquotSum(number) < number; 29 } 30 // END number_classifier_java8 31 32 // BEGIN java8_filter_fast 33 public static List<Integer> fastFactorsOf(int number) { 34 List<Integer> factors = range(1, (int) (sqrt(number) + 1)) 35 .filter(potential -> number % potential == 0).boxed()// 返回stream<Integer> 36 .collect(toList());// 折叠/化约,reduce 37 List<Integer> factorsAboveSqrt = factors.stream().map(e -> number / e).collect(toList()); 38 factors.addAll(factorsAboveSqrt); 39 //将stream变为ArrayList 40 return factors.stream().distinct().collect(toList()); 41 } 42 // END java8_filter_fast 43 }
测试类:
1 package cn._3.numberclassifier; 2 3 public class Mmain { 4 5 public static void main(String[] args) { 6 Integer number = 666; 7 System.out.println(NumberClassifier.isPerfect(number)+","+NumberClassifier.isAbundant(number)+","+NumberClassifier.isDeficient(number)); 8 } 9 }
Java8新特性——lambda表达式.(案例:完全数分类)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。