Параметризация 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.

Предложите вам выполнить тест производительности до и после применения тройного изменения, посмотреть, является ли влияние приемлемым, и двигаться дальше, если оно есть.

Другие вопросы по тегам