zoukankan      html  css  js  c++  java
  • Spring初始化 Map 和 解析Json value

    单独定义Map数据结构的bean:
    <bean id= "expToLevelMap" class="org.springframework.beans.factory.config.MapFactoryBean" >
               <property name ="sourceMap">
                   <map>
                        <entry key ="expToLevel">
                             <value>
                             <![CDATA[
                            [{id:0, "name":"江湖小虾","level":0,"exp":0},
                            {id:1, "name":"江湖小虾","level":1,"exp":6},
                            {id:2, "name":"江湖小虾","level":2,"exp":16},
                            {id:3, "name":"江湖小虾","level":3,"exp":40},
                            {id:4, "name":"江湖小虾","level":4,"exp":70},
                            {id:5, "name":"江湖小虾","level":5,"exp":110},
                            {id:6, "name":"江湖小虾","level":6,"exp":190},
                            {id:7, "name":"江湖小虾","level":7,"exp":310},
                            {id:8, "name":"江湖小虾","level":8,"exp":470},
                            {id:9, "name":"江湖小虾","level":9,"exp":670},
                            {id:10, "name":"江湖小虾","level":10,"exp":790}
                            ]
                             ]]>
                             </value>
                        </entry>
                   </map>
               </property>
          </bean >
      property可以定义很多个,这样的方式,用spring配置就可以重用这个map里的值了。
     
      value是一个json数组,数组中是一个exp值和level的对应关系的结构。那么我们在spring启动的时候就解析这个value,把它转成java中Object,提供给其他组件使用。
     
      接下来要做的是解析这个value到jsonArray,再解析到object TreeMap。
     
      所以我们在初始化bean容器的时候就进行解析:
      这里使用 @PostConstruct 
      
    @Service("expToLevelService" )
    public class ExpToLevelServiceImpl {
    
        @Resource
        private Map<String , String> expToLevelMap;
    
        private TreeMap<Long , ExpToLevelObj>              expToLevelTreeMap;
    
        @PostConstruct
        public void init () {
            expToLevelTreeMap = new TreeMap<Long , ExpToLevelObj>();
            JSONArray array = JSONArray.parseArray (expToLevelMap. get("expToLevel" ));
            for ( Object object : array) {
                JSONObject jsonObj = (JSONObject) JSONObject.parse (object. toString());
                ExpToLevelObj obj = new ExpToLevelObj(jsonObj .getIntValue( "id"), jsonObj.getIntValue ("exp") ,
                                                      jsonObj.getIntValue ("level") , jsonObj .getString( "name"));
               
                expToLevelTreeMap.put (jsonObj. getLongValue("exp" ), obj);
            }
        }
    
        public TreeMap<Long , ExpToLevelObj> getExpToLevelTreeMap (){
            return expToLevelTreeMap ;
        }
       
    }
    
    
      这里又使用了TreeMap的特性,把exp(经验值)和level(等级)的对应关系放入TreeMap后,外界想知道一个随机的exp查出在多少level,是比较方便的。
     最后我们会组装好一个expToLevelTreeMap 提供出去。
     
    所以整个过程类似读取配置文件,进行不同的配置。


    ExpToLevelObj
    :
    public class ExpToLevelObj {
    
            public ExpToLevelObj(){
            }
    
            public ExpToLevelObj(int id, int exp, int level, String name){
                super();
                this.id = id;
                this.exp = exp;
                this.level = level;
                this.name = name;
            }
    
            private int    id;
            private int    exp;
            private int    level;
            private String name;
    
            public int getId() {
                return id;
            }
    
            public void setId(int id) {
                this.id = id;
            }
    
            public int getExp() {
                return exp;
            }
    
            public void setExp(int exp) {
                this.exp = exp;
            }
    
            public int getLevel() {
                return level;
            }
    
            public void setLevel(int level) {
                this.level = level;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
        }
    View Code
    
    

    外界使用:

      下面的代码就可以查出25exp,处于多少等级了

    TreeMap < Long, ExpToLevelObj > treeMap = expToLevelService . getExpToLevelTreeMap ();
    
    expToLevelObj = treeMap . lowerEntry( 25) .getValue () ;
    
    expToLevelObj . getLevel()
     
     
     
  • 相关阅读:
    Anagram
    HDU 1205 吃糖果(鸽巢原理)
    Codeforces 1243D 0-1 MST(补图的连通图数量)
    Codeforces 1243C Tile Painting(素数)
    Codeforces 1243B2 Character Swap (Hard Version)
    Codeforces 1243B1 Character Swap (Easy Version)
    Codeforces 1243A Maximum Square
    Codeforces 1272E Nearest Opposite Parity(BFS)
    Codeforces 1272D Remove One Element
    Codeforces 1272C Yet Another Broken Keyboard
  • 原文地址:https://www.cnblogs.com/killbug/p/3469463.html
Copyright © 2011-2022 走看看