2

これは、Stackoverflow での最初の質問です。提案された問題の 1 つに関する問題を見つけ、同僚からそれに関する調査を依頼されました。

私の質問は私がクラスを持っていることです

   Class Function{
    String func;
   String funcname;
   boolean log;
   }

私はいくつかのオブジェクトを作成しました:

 obj1 : ("a" ,"b",true)- //these values come from either DB or UI
obj2 : ("c" ,"x",true)
obj3 : ("a" ,"z",true)

私はリストを持っています:

      List<function> flist;

今、私はそのリストを地図に入れたいと思っており、地図の中に入れたいと思っています

     Map<String, List<function>> funcMap

次に、次の出力を表示します。

    a:[obj1 obj3]
    b:[obj2]

リストがある場合、必要に応じて上記の出力を見つけて見つける方法

4

5 に答える 5

1

これを試して、

にすべてのオブジェクトを追加しますflist

マップを初期化する

  Map<String, List<Function>> funcMap = new HashMap<String, List<Function>>();

keyオブジェクトが値リストに追加する func 値に基づいて、関連するオブジェクトを追加します。

  for (Function functionValue : flist)
    {
        List<Function> functionList = funcMap.get(functionValue.getFunc());
        if (functionList != null && !functionList.isEmpty())
        {
            functionList.add(functionValue);
        }
        else
        {
            functionList = new ArrayList<Function>();
            functionList.add(functionValue);
            funcMap.put(functionValue.getFunc(), functionList);
        }
    }

最後に funcMap を印刷します

    for (Map.Entry< String, List<Function>> entry : funcMap.entrySet())
    {
        System.out.println("Key :  " + entry.getKey() + "Values : "+entry.getValue());
    }
于 2013-10-10T08:37:26.490 に答える
0

どうですか:

public class FuncTest {

    public static void main(String[] args) {
        new FuncTest().start();

    }

    private void start() {
        List<Function> flist = new ArrayList<Function>();
        flist.add(new Function("a", "b", true));
        flist.add(new Function("c", "x", true));
        flist.add(new Function("a", "z", true));

        Map<String, List<Function>> funcMap = new HashMap<String, List<Function>>();
        for (Function func : flist) {
            this.add(func.func, func, funcMap);
            this.add(func.funcname, func, funcMap);
        }
    }

    private void add(String field, Function func, Map<String, List<Function>> funcMap) {
        List<Function> subList = funcMap.get(field);
        if (subList == null) {
            subList = new ArrayList<Function>();
            funcMap.put(field, subList);
        }

        subList.add(func);
    }
}

ノート

Chris が既に述べたように、コードの設計について考える必要があります。使用gettersしてsetters..

于 2013-10-10T08:26:46.087 に答える
0
public class Stackoverflow {

    public static void main(String[] args) {
        Function obj1 = new Function("a" ,"b",true);
        Function obj2 = new Function("c" ,"x",true);
        Function obj3 = new Function("a" ,"z",true);

        List<Function> functionsList1 = new ArrayList<Function>();
        functionsList1.add(obj1);
        functionsList1.add(obj3);

        List<Function> functionsList2 = new ArrayList<Function>();
        functionsList2.add(obj2);

        Map<String, List<Function>> funcMap = new LinkedHashMap<String, List<Function>>();
        funcMap.put("a", functionsList1);
        funcMap.put("b", functionsList2);

        Set<Entry<String,List<Function>>> entrySet = funcMap.entrySet();
        for (Entry<String, List<Function>> entry : entrySet) {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
    }

}

class Function {
    String func;
    String funcname;
    boolean log;

    public Function(String func, String funcname, boolean log) {
        super();
        this.func = func;
        this.funcname = funcname;
        this.log = log;
    }

    @Override
    public String toString() {
        return "Function [func=" + func + ", funcname=" + funcname + ", log="
                + log + "]";
    }


}
于 2013-10-10T08:32:38.337 に答える