Stream.reduce(Float,BinaryOperator)对应哪个函数式接口方法?示例Lambda对应哪个接口?
问题1:Stream.reduce(Float,BinaryOperator)中的BinaryOperator指代哪个函数式接口的方法?
BinaryOperator本身就是Java标准库java.util.function包下的函数式接口,它是BiFunction<T, T, T>的子接口,专门用于处理两个同类型输入参数并返回同类型结果。它的核心抽象方法是:
T apply(T t, T u)
在Stream.reduce(Float, BinaryOperator)这个方法签名里,BinaryOperator对应的就是这个接口的apply方法,用来定义两个Float类型值的合并逻辑。
问题2:示例代码中Lambda表达式(sum, price)->sum+price对应的是哪个函数式接口?
先整理你的示例代码:
List<Product> productsList = new ArrayList<Product>(); productsList.add(new Product(1,"HP Laptop",25000f)); productsList.add(new Product(2,"Dell Laptop",30000f)); productsList.add(new Product(3,"Lenevo Laptop",28000f)); productsList.add(new Product(4,"Sony Laptop",28000f)); productsList.add(new Product(5,"Apple Laptop",90000f)); Float totalPrice = productsList.stream() .map(product->product.price) .reduce(0.0f,(sum, price)->sum+price); System.out.println(totalPrice);
这里调用的是Stream的reduce(T identity, BinaryOperator<T> accumulator)重载方法,第二个参数明确要求BinaryOperator<T>类型。经过map操作后,流中的元素是Float类型,所以这个Lambda表达式对应的是**BinaryOperator<Float>**函数式接口——它的签名完全匹配:接收两个Float参数,返回一个Float结果,完美契合BinaryOperator的apply方法要求。
(本质上BinaryOperator<T>是BiFunction<T, T, T>的子接口,这个Lambda也符合BiFunction<Float, Float, Float>的要求,但在当前reduce方法的上下文里,BinaryOperator<Float>是最准确的答案。)
内容的提问来源于stack exchange,提问作者Rence Abishek
相关产品推荐
相关产品推荐

