gpt4 book ai didi

java - Spring:将转换矩阵插入 .properties 文件

转载 作者:行者123 更新时间:2023-12-01 13:36:22 24 4
gpt4 key购买 nike

我有转换矩阵,每个列和行索引表示为字符串,值表示为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com