我想在Android上使用Java,并使用自定义重映射功能将元素合并到Map中。
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);
我了解Android Java不支持lambda表达式的Java 8。因此,我认为我需要将MyRemappingFunction实现为BiFunction,但是我在理解BiFunction接口声明以编译任何内容时遇到了麻烦。
public static BiFunction<? super MyObject,? super MyObject,? extends MyObject> remappingfunction()
有任何提示吗?
答案 0 :(得分:1)
remappingFunction
是BiFunction<? super MyObject, ? super MyObject,? extends MyObject>
的实现,使用您需要在此处定义的apply
方法进行评估。
请考虑一个示例,如果将val
的整数属性MyObject
(通过求和)合并到映射到同一键的情况下,实现将类似于:
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());
}
});
这也可以在 lambda 中表示为:
map.merge("key", xMyObject,
(myObject1, myObject2) -> new MyObject(myObject1.getVal() + myObject2.getVal()));