Android слияния карт с пользовательской бифункцией

Используя Java на Android, я хочу объединить элемент в карту с пользовательской функцией переназначения.

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 ответ

Решение

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()));
Другие вопросы по тегам