Я хочу объединить две хеш-карты с подстановочными знаками в одну хеш-карту, которая по-прежнему содержит динамические значения.
У меня есть SharedPreferences в двух разных местах в моем приложении Android - мне нужно объединить весь набор водну хэш-карту для передачи в функцию.
Я пробовал функции putAll () и слияния, но подстановочные знаки продолжают вызывать проблемы.
В настоящее время у меня есть две функции, которые возвращают значения,но мне действительно нужно объединить их в одну функцию.
private HashMap<String, ?> getAppPrefs() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
return (HashMap<String, ?>) prefs.getAll();
}
private HashMap<String, ?> getScorePrefs() {
SharedPreferences scoreprefs= this.getSharedPreferences("scoreprefs", 0);
return (HashMap<String, ?>) scoreprefs.getAll();
}
Мой ожидаемый результат будет примерно таким:
private HashMap<String, ?> getAllPrefs() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
HashMap<String, ?> map1 = (HashMap<String, ?>) prefs.getAll();
SharedPreferences scoreprefs= this.getSharedPreferences("scoreprefs", 0);
HashMap<String, ?> map2 = (HashMap<String, ?>) prefs.getAll();
HashMap<String, ?> map3 = map1.merge(map2); // <-- Or something else
return map3;
}
Если я использую слияние, я получаю:
error: no suitable method found for merge(HashMap<String,CAP#1>)
HashMap<String, ?> map3 = map1.merge(map2);
^
method Map.merge(String,CAP#2,BiFunction<? super CAP#2,? super CAP#2,? extends CAP#2>) is not applicable
(actual and formal argument lists differ in length)
method HashMap.merge(String,CAP#2,BiFunction<? super CAP#2,? super CAP#2,? extends CAP#2>) is not applicable
(actual and formal argument lists differ in length)
where CAP#1,CAP#2 are fresh type-variables:
CAP#1 extends Object from capture of ?
CAP#2 extends Object from capture of ?