android java地图与自定义双功能合并
在Android上使用Java,我想用一个自定义重映射函数将一个元素合并到一个映射中android java地图与自定义双功能合并,java,android,lambda,functional-interface,Java,Android,Lambda,Functional Interface,在Android上使用Java,我想用一个自定义重映射函数将一个元素合并到一个映射中 Map<String, MyObject> map = new HashMap<String, MyObject>(); // init map with some values here.... then MyObject xMyObject = new MyObject(123); // init this instance of MyObject map.merge("key",
Map<String, MyObject> map = new HashMap<String, MyObject>();
// init map with some values here.... then
MyObject xMyObject = new MyObject(123); // init this instance of MyObject
map.merge("key", xMyObject, myRemappingFunction);
Map Map=newhashmap();
//这里有一些值的初始化映射。。。。然后
MyObject xMyObject=新的MyObject(123);//初始化MyObject的此实例
map.merge(“key”,xMyObject,myRemappingFunction);
我知道Android Java不支持Java 8对lambda表达式的支持。因此,我认为我需要将myRemappingFunction实现为一个双函数,但我在理解双函数接口声明以获取任何要编译的内容方面遇到了困难
public static BiFunction<? super MyObject,? super MyObject,? extends MyObject> remappingfunction()
publicstaticbifunction这个remappingFunction
是一个BiFunction的实现注意,对于您的情况,因为类型总是MyObject
一个扩展BiFunction
的BinaryOperator
的具体实现。谢谢!这给了我一个编译w/o错误的解决方案,您的第一个实现答案是我认为我需要使用的,考虑到我的对象合并的复杂性。我会尽快批准,只要我能验证我的新代码实际运行(不久)。谢谢你的快速回答。耶,我似乎已经足够理解你的答案,可以使用它了。我在上面关于BinaryOperator是双函数的一个特化的评论中也看到了我的困惑,如果没有您在这里的具体代码示例,我是不会理解这个文档的。使用BinaryOperator似乎也同样有效。他们可以在Map.merge()的文档中使用它。毕竟,在Map.merge()中使用的3种参数类型不相等的任何其他双函数都可能存在吗?@LarryTseng使用BiFunction
的区别在于它允许您使用?超级V?超级V?扩展V
以获取父类型输入的子类型返回值。虽然使用BinaryOperator
不可能做到这一点,因为这可能是全部?超级V
或?扩展V
。啊!我现在明白了。谢谢我不知道的一个关键事实是,这一点导致了我的困惑,促使我提出这个问题
map.merge("key", xMyObject, new BiFunction<MyObject, MyObject, MyObject>() {
// this is the definition of what to do for two such values
@Override
public MyObject apply(MyObject myObject1, MyObject myObject2) {
return new MyObject(myObject1.getVal() + myObject2.getVal());
}
});
map.merge("key", xMyObject,
(myObject1, myObject2) -> new MyObject(myObject1.getVal() + myObject2.getVal()));