Как вы указали в комментариях, что новые TreeMap
введенные значения должны быть объединены с существующими, вы можете переписать свое поле и метод put
следующим образом:
private static Map<String, Map<String, MyPrivateClass>> testParameters = new ConcurrentHashMap<>();
public static void put(String key, TreeMap<String, MyPrivateClass> value) {
Map<String, MyPrivateClass> currentValue = testParameters.get(key);
if(null == currentValue) {
// create new sub map
TreeMap<String, MyPrivateClass> newValue = new TreeMap<>(value);
testParameters.put(key, Collections.synchronizedMap(newValue));
} else {
// merge values' entries into existing sub map.
currentValue.putAll(value);
}
}
, который можно записать как:
public static void put(String key, TreeMap<String, MyPrivateClass> value) {
testParameters.computeIfAbsent(key, k -> (
Collections.synchronizedMap(
new TreeMap<>(value.comparator())))).putAll(value);
}
Использование ConcurrentHashMap указывает, что вы собираетесь получать доступ к карте одновременно из нескольких потоков, поэтому я добавил Collections.synchronizedMap()
.