1

CLI に追加する次の引数があります
-sbx
-CSWConfig
-stripInfo
-modelSources
-catchArchive
-swSupplierName
-modelsSWExchnage

しかし、ヘルプを表示している間、これらのオプションを(以下に示すように)ソートされた順序で表示していますが、これは望ましくありません。
-CatchArchive
-CSWConfig
-modelSources
-sbx
-stripInfo
-swSupplierName

このリンクを1 つ読みましたが、ヘルプ コンテンツの表示中に順序を保持できません。

private void print_help() {
    String CONST_STR_CLI_INFO = "ercli.exe custzip";
    HelpFormatter formatter = new HelpFormatter();
    formatter.setOptionComparator(new Comparator() {

        @Override
        public int compare(Object o1, Object o2) {
            Option op1=(Option) o1;
            Option op2=(Option) o2;
            return //what to do here?
        }
    });
    formatter.printHelp(CONST_STR_CLI_INFO, null, options, "", true);
}
4

1 に答える 1

0

Options() クラスはオプションを Maps に内部的に格納するため、順序は保持されません。つまり、すでにわかっているように、独自の注文を提供する必要があります。

順序を取得するには、キーをリストに事前に配置して、各要素に必要な順序のインデックスを付けることができます。

final List<String> optionKeys = new ArrayList<>();

optionKeys.add("sbx");
optionKeys.add("CSWConfig");
optionKeys.add("stripInfo");
optionKeys.add("modelSources");
optionKeys.add("catchArchive");
optionKeys.add("swSupplierName");
optionKeys.add("modelsSWExchnage");

次に、コンパレータで、このリストのインデックスで比較できます。

    @Override
    public int compare(Object o1, Object o2) {
        Option op1=(Option) o1;
        Option op2=(Option) o2;
        return Integer.compare(optionKeys.indexOf(op1.getLongOpt()), optionKeys.indexOf(op1.getLongOpt()));
    }
于 2014-10-09T06:57:03.567 に答える