我有转换矩阵,每个列和行索引表示为字符串,值表示为 boolean 值。例如:
matrix["first_state"]["second_state"] = true;
matrix["first_state"]["second_state"] = false;
但是java不支持带有字符串索引的数组。所以我将转换矩阵插入 Map 中。
matrix.put(new Key("FirstOpenState", "ThirdGreenState"), false);
我有大约 15 个状态和大约 300 行描述转换矩阵的代码。我觉得很丑。
问题:
将这些值推送到 spring .properties 的优雅方法是什么?
最佳答案
直接映射可能也会很丑陋。我只是将属性列出为
outgoingTransitions.s1=s2,s5
outgoingTransitions.s2=s4,s1
然后将这些属性加载到 Properties 对象中,迭代键 (s1),拆分值 (s2,s5) 并使用相应的 Key
和 boolean 值填充矩阵映射。
这里有一些快速但肮脏的代码来演示,使用 Guava 进行字符串操作。
import com.google.common.base.Splitter;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import javax.annotation.PostConstruct;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
@Component
public class Foo {
@Autowired
@Qualifier("transitionProperties")
private Properties transitionProperties;
private Map<String, Set<String>> transitions = Maps.newHashMap();
@PostConstruct
public void loadTransitions() {
for (Map.Entry<Object, Object> transitionList : transitionProperties.entrySet()) {
String sourceState = (String) transitionList.getValue();
if (!transitions.containsKey(sourceState)) {
transitions.put(sourceState, Sets.<String>newHashSet());
}
Set<String> destinationStates = transitions.get(sourceState);
for (String destinationState : Splitter.on(',').split((String) transitionList.getValue())) {
destinationStates.add(destinationState);
}
}
}
public boolean isTransitionAllowed(String sourceState, String destinationState) {
Set<String> destinationStates = transitions.get(sourceState);
return destinationStates != null && destinationStates.contains(destinationState);
}
}
关于java - Spring:将转换矩阵插入 .properties 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21238700/