Параметризация MultiKeyMap с несколькими ключами
Есть ли способ параметризации Apache Commons? MultiKeyMap
с несколькими ключами? т.е.
MultiKeyMap<String, String, Integer, Float> m = new MultiKeyMap<String, String, Integer, Float>();
У меня изначально был сырой MultiKeyMaps
но из-за частоты этих карт в моей программе я хочу обеспечить согласованность путем их параметризации.
Я не хочу использовать MultiKeys
потому что данные, которые я храню в MultiKeyMap, требуют MultiKey<String, String, Integer>
, Тем не мение, MultiKey
поддерживает только ключи одного типа (MultiKey<String>
или же MultiKey<Integer>
). Если есть обходной путь к этому, я открыт для предложений все же.
Чтобы было ясно, общая проблема, которую я хочу решить, заключается в следующем: я хочу убедиться, что MultiKeyMaps
в моей программе есть ключи одних и тех же типов путем их параметризации, но с разными классами внутри ключа (<K, K, K, V> = <String, String, Integer, Float>
).
РЕДАКТИРОВАТЬ: было предложено (в теперь удаленном ответе) я использую Triple<String, String, Integer>
и я попробовал:
private static MultiKeyMap<Triple<String, String, Integer>, Float> multiKeyMap = new MultiKeyMap<Triple<String, String, Integer>, Float>();
Triple<String, String, Integer> t = Triple.of("asdf", "asdf", 4);
multiKeyMap.put(t, 5);
Тем не менее, в третьей строке этого утверждения, кажется, ожидать чего-то в виде put(Triple<String, String, Integer> key1, Triple<String, String, Integer> key2, Float value)
, Мой вопрос теперь такой: с этим ответом, мне теперь не нужно MultiKeyMap
? Должен ли я использовать Map<Triple<String, String, Integer>, Float>
сейчас?
Также стоит отметить, что мне нужно часто перебирать эту карту (с большим объемом данных), что было легко, когда у меня был непараметризованный MultiKeyMap
потому что я мог бы просто изменить параметры в get()
метод по мере необходимости. Используя Triple
Я считаю, что мне придется создать новый Triple
экземпляр каждой итерации; это будет ресурсоемким или есть способ обойти это?
1 ответ
Вы можете использовать Triple с любой картой (например, HashMap).
Вам нужно будет создать Triple для каждого поиска, это будет иметь ненулевое влияние на производительность, но не должно быть огромным, и будет иметь самый чистый код из imo.
Предложите вам выполнить тест производительности до и после применения тройного изменения, посмотреть, является ли влияние приемлемым, и двигаться дальше, если оно есть.