Android слияния карт с пользовательской бифункцией - PullRequest
0 голосов
/ 07 февраля 2019

Используя Java на Android, я хочу объединить элемент в 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 нет поддержки Java 8 для лямбда-выражений.Поэтому я думаю, что мне нужно реализовать myRemappingFunction как BiFunction, но у меня возникают проблемы с пониманием объявления интерфейса BiFunction, чтобы получить что-либо для компиляции.

public static BiFunction<? super MyObject,? super MyObject,? extends MyObject> remappingfunction()

Любые подсказки, пожалуйста?

1 Ответ

0 голосов
/ 07 февраля 2019

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());
    }
});

это также может быть представлено в лямбда как:

map.merge("key", xMyObject, 
                (myObject1, myObject2) -> new MyObject(myObject1.getVal() + myObject2.getVal()));
...