Android Java Map与自定义BiFunction合并

时间:2019-02-07 07:10:22

标签: java android lambda functional-interface

我想在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()

有任何提示吗?

1 个答案:

答案 0 :(得分:1)

remappingFunctionBiFunction<? 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()));