0

Java でテーブル/リストを作成したかったのですが、それを処理する最良の方法は何でしょうか。テーブルは次のような構造になっている必要があります。

Term     propertyList         entitiesList 

a1      p1=1, p2=2, p3=2          T1,T2  
a2      p5=0, p4=5 ,p3=3          T2,T1 
a3      p1=1 ,p4=3, p3=9          T3,T1,T2
...
a10

ちょうど 10 個の用語を含むリストがあり、各用語にはプロパティのリスト (キーと値の深い) があり、プロパティは 1 つまたは複数のエンティティのいずれかになります。

たとえば、リスト、マップ、コレクションなどを使用する必要があります。ハードコードされた値をコード内のリテラルとして追加するにはどうすればよいですか。また、そこからデータを読み取るための最良の方法は何ですか。後ですべてのエンティティにこれを使用し、すべての用語に関与する関連プロパティを見つける必要があることを考えると、パフォーマンス。

4

2 に答える 2

0

まずTermクラスを作成します。

したがって、用語のリストがあります:List<Term>

タームクラス

public class Term {
   private String mName = "";
   private Map<String, Integer> mPropertyMap = new LinkedHashMap<String, Integer>();
   private List<String> mEntitiesList = new ArrayList<String>();

   public Term(String name) {
       mName = name;
   }

   public void generate(Map<String, Integer> propertyMap,   List<String> entitiesList) {
    mPropertyMap = propertyMap;
    mEntitiesList = entitiesList;
   }

  public Map<String, Integer> getPropertyMap() {
    return mPropertyMap;
}

public void setPropertyMap(Map<String, Integer> propertyMap) {
    this.mPropertyMap = propertyMap;
}

public List<String> getEntitiesList() {
    return mEntitiesList;
}

public void setEntitiesList(List<String> entitiesList) {
    this.mEntitiesList = entitiesList;
}

public String getName() {
    return mName;
}

public void setmName(String name) {
    this.mName = name;
}

}

メインクラス

 public class MyClass {

private List<Term> mTermList = null;

private void init() {
    mTermList = new ArrayList<Term>();
}


private void addSomeTerm() {
     Map<String, Integer> propertyMap = new LinkedHashMap<String, Integer>();

     propertyMap.put("p1", 1);
     propertyMap.put("p2", 2);
     propertyMap.put("p3", 3);

     List<String> entitiesList = new ArrayList<String>();
     entitiesList.add("T1");
     entitiesList.add("T2");


     Term term = new Term("a1");
     term.generate(propertyMap, entitiesList);

     mTermList.add(term);
}

private String printTerms() {

    StringBuilder buff = new StringBuilder();

    for(Term currTerm : mTermList){

        buff.append(currTerm.getName()).append("     ");

        Map<String, Integer> propertyMap = currTerm.getPropertyMap();


        Set<String> sets = propertyMap.keySet();

        Iterator<String> itr = sets.iterator();

        String key = null;
        Integer value = null;

        while(itr.hasNext()){

            key = itr.next();               
            value = propertyMap.get(key);

            buff.append(key + "=" + value).append(",");
        }

        buff.setLength(buff.length()-1); // remove last ','

        buff.append("     ");

        List<String> entitiesList = currTerm.getEntitiesList();

        for(String str : entitiesList){
            buff.append(str).append(",");
        }

        buff.setLength(buff.length()-1); // remove last ','         

    }

    return buff.toString();
}


/**
 * @param args
 */
public static void main(String[] args) {

    MyClass m = new MyClass();
    m.init();

    m.addSomeTerm();

    System.out.println(m.printTerms());
}

}

出力:

 a1     p1=1,p2=2,p3=3     T1,T2
于 2012-11-20T16:14:11.300 に答える
0

次の構造を持つことができるようです。

class Term {
    String id;
    Map<String, String> properties;
    List<Entity> entities; // (or Set<Entity> if no duplicates are allowed)
}

しかし、「深い」と「プロパティは1つ以上のエンティティのいずれかにある可能性がある」とはどういう意味かはあまり明確ではありません。

于 2012-11-20T16:11:22.830 に答える