Why not use TypeCandidate instances as list elements? This would make it possible to avoid having String → TypeCandidate map.