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