[Vengo de C # de fondo, pero la respuesta debería aplicarse]
[No importa mucho, pero supongo que el último elemento es ConcurrentHashMap <C, Integer> ]
Tiene una función f de tipo A -> (B -> (C -> int))
Si realmente es lo que necesita, no tengo una respuesta lista. Pero tal vez, tener una función f de tipo (A x B x C) -> int sería suficiente para sus propósitos.
La diferencia entre dos casos es que el primero es más vago, más funcional, posiblemente más elegante y es posible tener una función "parcialmente aplicada". Por ejemplo, tiene un elemento a (de tipo A), aplica a a f y tiene una función g de tipo (B -> (C -> int)) para pasar, enviar a métodos, lo que sea. Sin embargo, es un poco engorroso y un poco más de código para inicializar correctamente la función.
El segundo es más entusiasta y menos elegante, pero puede ser más fácil de codificar y comprender. Todo lo que necesita hacer es tener una clase genérica Triple <A, B, C> , anular Equals () y GetHashCode () para que tenga semántica de valor (dos instancias deben considerarse iguales si tienen elementos iguales) y declarar que el ConcurrentHashMap es de Triple a Entero . El costo de pago más obvio es que necesita tener los elementos A , B , C listos de una vez para crear una instancia de Triple y realizar la búsqueda.
Editar: Si el último elemento es realmente ConcurrentHashMap <C, Integer> , su clase genérica tendrá campos A , B e Integer , y la asignación será de Triple <A, B, Integer> a C
A
,B
yC
? Sería más fácil responder si pudiera entender el significado de la anidación de tres niveles de sus mapas de has allí.ConcurrentHashMap
s en cada nivel de anidamiento?