diff --git a/pmml-transpiler/src/main/java/org/jpmml/translator/TranslationContext.java b/pmml-transpiler/src/main/java/org/jpmml/translator/TranslationContext.java index 54712c4..e6de9a8 100644 --- a/pmml-transpiler/src/main/java/org/jpmml/translator/TranslationContext.java +++ b/pmml-transpiler/src/main/java/org/jpmml/translator/TranslationContext.java @@ -477,6 +477,18 @@ public void _return(JExpression valueExpr, Map resultMap, V defaultRes block._return(PMMLObjectUtil.createExpression(defaultResult, this)); } else + if((resultMap.size() > 64) && JBinaryFileInitializer.isExternalizable(resultMap.keySet())){ + JBinaryFileInitializer resourceInitializer = new JBinaryFileInitializer(IdentifierUtil.create(Map.class.getSimpleName(), Collections.singletonList(resultMap)) + ".data", this); + + JFieldVar mapField = resourceInitializer.initNumbersMap("map$" + System.identityHashCode(Collections.singletonList(resultMap)), (Map)resultMap); + + JBlock thenBlock = block._if(mapField.invoke("containsKey").arg(valueExpr))._then(); + + thenBlock._return(mapField.invoke("get").arg(valueExpr)); + + block._return(PMMLObjectUtil.createExpression(defaultResult, this)); + } else + { boolean stringKeys = true;