我在 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>
我需要以这样的方式维护 Map 值的序列,即首先评估 CFN 值,如果不匹配,则评估 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 。 但如果我打印 map ,就会得到错误的序列
Set<MedtronicB2BRuleType> ruleTypeSet = ruleEvaluationService.keySet();
结果:[PH、CFN、MPG]
为什么我没有得到像 CFN、PH、MPG 这样的序列。在 spring 中定义序列的正确方法是什么。
请帮忙。
最佳答案
您可以使用 LinkedHashMap 代替 HashMap,这样您的订单将被保留。
<util:map id="ruleEvaluationService" map-class="java.util.LinkedHashMap ">
关于java - spring中如何定义Map值的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33295326/