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

标签 java spring

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

相关文章:

java - 如何在两个应用程序之间共享HashMap

java - 错误 : java. lang.NoSuchMethodError : org. objectweb.asm.ClassWriter.<init>(I)V

Spring Boot 测试失败, 'No bean named ' webHandler'可用'

java - 如何在 Java 中检测损坏的图像(PNG、JPG)

java - Android 应用程序和 java Activity 、onCreate() 方法和 XML 问题

java - 使用 jsoup 通过 Java 加载嵌套链接

java - Spring 启动错误: Use of @OneToMany or @ManyToMany targeting an unmapped class

java - 验证以检查我的三角形的坐标是否是 java 中的有效输入,这意味着三角形已正确构造

java - 如何呈现复选框?

Spring + Hibernate注释错误 "is not mapped"