Есть ли способ параметризовать Apache Commons 'MultiKeyMap
с несколькими ключами? т.е.Параметрировать 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>
).
EDIT: Это было предложено (в настоящее делецией ответ) Я использую 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
на каждой итерации; это будет тяжелый ресурс или есть способ обойти это?
MultiKeyMap позволяет использовать только один тип ключа, поэтому параметры я могу видеть: 1) использовать его без генериков 2) свернуть ваши типы ключей до строки 3) использовать карту с Triple 4) написать свою собственную оболочку вокруг MultiKeyMap
@Taylor Итак, если я использую класс «Triple», мне нужно использовать «HashMap» вместо «MultiKeyMap»? – 17slim
Если вы используете Triple для ключа, любая Map impl будет делать (за исключением MultiKeyMap, которая ожидает MultiKey в стандартных методах карты). – Taylor