如果一个方法的参数是一个接口,并且这个接口是一个函数式接口,(何为函数式接口==),那么就可以用以下的三种方法去处理
比如:
/** * 函数式接口中的接口可以直接调用静态方法 */ public static void testReduce() { System.out.println("===========testReduce===="); Optional.ofNullable(menu.stream().collect( Collectors.reducing( BinaryOperator.maxBy( Comparator.comparingInt(new ToIntFunction() { @Override public int applyAsInt(Object value) { Dish dish = (Dish) value; return dish.getCalories(); } }) ) ) )).ifPresent(System.out::println); // System.out.println(result); // Optional.ofNullable(result).ifPresent(System.out::println); } public static void testReduce1() { System.out.println("===========testReduce111===="); Optional.ofNullable(menu.stream().collect( Collectors.reducing( BinaryOperator.maxBy( Comparator.comparingInt((t -> t.getCalories())) ) ) )).ifPresent(System.out::println); // System.out.println(result); // Optional.ofNullable(result).ifPresent(System.out::println); } public static void testReduce2() { System.out.println("===========testReduce222===="); Optional.ofNullable(menu.stream().collect( Collectors.reducing( BinaryOperator.maxBy( /** * 方法引用: * 默认的实现了函数式接口中的方法,这个不需要去关心,并将 * 这个方法引用当作接口中方法的参数,去传进去; * 这个是重点 */ Comparator.comparingInt(Dish::getCalories)) ) )).ifPresent(System.out::println); }