草庐IT

BinaryOperator

全部标签

Java 8 stream.collect( ... groupingBy ( ... mapping( ... reducing ))) 减少 BinaryOperator 的使用

我尝试了一个使用groupingBy、mapping和reducing的解决方案以下问题:Elegantlycreatemapwithobjectfieldsaskey/valuefromobjectstreaminJava8.总结一下目标是得到一个以年龄为key,以一个人的爱好为Set的map。我想出的解决方案之一(不是很好,但这不是重点)有一个奇怪的行为。使用以下列表作为输入:ListpersonList=Arrays.asList(newPerson(/*name*/"A",/*age*/23,/*hobbies*/asList("a")),newPerson("BC",24,a

java - Stream.reduce(BinaryOperator<T> accumulator) 如何初始化?

以下代码无需初始化reduce操作即可完美运行。intsum=Stream.of(2,3).reduce((Integera,Integerb)->a+b).get();//sum=5intsum=Stream.of(2,3).reduce((Integera,Integerb)->a*b).get();//sum=6它如何知道第一个累加器是+以便它应该初始化为一个新的sum=0,而第二个累加器是*以便它应该初始化为一个新的sum=1吗? 最佳答案 1参数reduce不以标识值(0或1)开头。它仅对流中的值进行操作。如果您查看jav

java - BinaryOperator 的身份

我在Java8的UnaryOperator接口(interface)中看到下面的一段代码,它对参数不做任何事情并返回相同的值。staticUnaryOperatoridentity(){returnt->t;}BinaryOperator有没有接受两个相同类型的参数并返回一个值的东西staticBinaryOperatoridentity(){return(t,t)->t;}为什么我问这个问题是为了满足以下要求,Listlist=Arrays.asList("Abcd","Abcd");Mapmap=list.stream().collect(Collectors.toMap(str-

java - 我应该使用哪个 FunctionalInterface?

我正在学习将一些lambda表示形式写成FunctionalInterface.所以,要添加我使用的两个整数:BiFunctionbiFunction=(a,b)->a+b;System.out.println(biFunction.apply(10,60));给我输出70。但是如果我这样写BinaryOperatorbinaryOperator=(a,b)->a+b;我收到一条错误消息Wrongnumberoftypearguments:3;required:1BinaryOperator不是BinaryFunction的子项吗?我该如何改进它? 最佳答案

java - 用 BinaryOperator 替换 switch

我正在尝试用BinaryOperator功能接口(interface)替换算术运算的通用开关。基本方法是:privatestaticintcomputeOne(intres,Stringoperand,Stringoperation){intnumber=Integer.parseInt(operand);switch(operation){case"+":res+=number;break;case"-":res-=number;break;case"*":res*=number;break;case"/":res=(number!=0?res/number:Integer.MAX_

java - Java 8 方法签名不一致

Java8为我们提供了具有非常长签名的新方法,如下所示:static>CollectortoMap(FunctionkeyMapper,FunctionvalueMapper,BinaryOperatormergeFunction,SuppliermapSupplier)我觉得奇怪的是,使用通配符来确保前两个参数尽可能通用,而第三个参数只是一个BinaryOperator。.如果它们是一致的,那肯定是BiFunction?。我错过了什么吗?这是否有充分的理由,或者他们只是想避免让已经很可怕的签名变得更糟?编辑我懂PECS,我懂mergeFunction的原理应该被认为是采取两个U的一种

java - 在像 Stream.reduce() 这样的 API 中选择不变性的充分理由是什么?

审查Java8StreamAPI设计,我对Stream.reduce()上的通用不变性感到惊讶论据:Ureduce(Uidentity,BiFunctionaccumulator,BinaryOperatorcombiner)同一个API的一个看似更通用的版本可能对U的各个引用应用了协变/逆变。,如:Ureduce(Uidentity,BiFunctionaccumulator,BiFunctioncombiner)这将允许以下情况,目前这是不可能的://Assumingwewanttoreusethesetoolsallovertheplace:BiFunctionnumberAdd

java - 在像 Stream.reduce() 这样的 API 中选择不变性的充分理由是什么?

审查Java8StreamAPI设计,我对Stream.reduce()上的通用不变性感到惊讶论据:Ureduce(Uidentity,BiFunctionaccumulator,BinaryOperatorcombiner)同一个API的一个看似更通用的版本可能对U的各个引用应用了协变/逆变。,如:Ureduce(Uidentity,BiFunctionaccumulator,BiFunctioncombiner)这将允许以下情况,目前这是不可能的://Assumingwewanttoreusethesetoolsallovertheplace:BiFunctionnumberAdd

java - BigDecimal#min 方法是否符合 BinaryOperator 的条件?

Stream.reduce方法将BinaryOperator作为参数。BinaryOperator的函数签名是(T,T)->T。BigDecimal::min方法在其方法签名中只有1个参数(即(T)->T)。当我将BigDecimal::min传递给Stream.reduce方法时,为什么编译器不报错?示例代码:ListbigDecimalList=newArrayList();bigDecimalList.add(BigDecimal.valueOf(1));bigDecimalList.add(BigDecimal.valueOf(2));bigDecimalList.add(Bi
12