如何在Spring中定义Map值的序列

时间:2015-10-23 05:18:42

标签: java spring spring-mvc

我在Spring XML文件中定义了一个地图值。

* - spring.xml文件

<util:map id="ruleEvaluationService" map-class="java.util.HashMap">
    <entry key="CFN" value-ref="cfnRuleEvaluationService" />
    <entry key="PH" value-ref="phRuleEvaluationService" />
    <entry key="MPG" value-ref="mpgRuleEvaluationService" />
</util:map>

<bean id="ruleEngine" class="com.medtronic.b2b.core.cvg.service.impl.RuleEngineImpl">
   <property name="ruleEvaluationService" ref="ruleEvaluationService" />
</bean>

我需要以第一个CFN值评估的方式维护一系列Map值,如果不匹配那么PH和更多的MPG值。我的想法是,如果我将以正确的顺序给出Map中的条目,我将在我的java文件中得到相同的序列。但同样的事情并没有发生。

RuleEngineImpl.java

@Resource(name = "ruleEvaluationService")
private Map<MedtronicB2BRuleType, RuleEvaluationService> ruleEvaluationService;

// some code

public void setRuleEvaluationService(final Map<MedtronicB2BRuleType, RuleEvaluationService> ruleEvaluationService) {
    final Map<MedtronicB2BRuleType, RuleEvaluationService> map = new LinkedHashMap<MedtronicB2BRuleType, RuleEvaluationService>();
    for (final MedtronicB2BRuleType key : ruleEvaluationService.keySet()) {
        map.put(key, ruleEvaluationService.get(key));
    }
    this.ruleEvaluationService = Collections.unmodifiableMap(map);
}

}

这里我在setter方法中写一个登录,以正确的顺序填充地图。 但是,如果我正在打印Map,那么序列错误

Set<MedtronicB2BRuleType> ruleTypeSet = ruleEvaluationService.keySet();

结果: [PH,CFN,MPG]

为什么我没有得到像CFN,PH,MPG这样的序列。在春天定义序列的正确方法是什么。

请帮忙。

1 个答案:

答案 0 :(得分:2)

您可以使用LinkedHashMap而不是HashMap,在这种情况下,您的订单将被维护。

<util:map id="ruleEvaluationService" map-class="java.util.LinkedHashMap ">