如何保留帮助部分中的参数排序?

时间:2014-10-08 12:01:39

标签: java apache-commons-cli

我有以下参数添加到CLI
-sbx
-CSWConfig
-stripInfo
-modelSources
-catchArchive
-swSupplierName
-modelsSWExchnage

但在显示帮助时,它会按照排序顺序显示这些选项(如下所示),我不想要这些选项,我希望所有选项在添加时都按顺序排列。
-CatchArchive
-CSWConfig
-modelSources
-sbx
-stripInfo
-swSupplierName

我为此阅读了一个link,但在显示帮助内容时无法保留顺序。

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);
}

1 个答案:

答案 0 :(得分:0)

由于Options()类在内部存储了Maps中的选项,因此它不会保留任何顺序。这意味着您需要提供自己已经找到的订单。

要获得订购,您可以将密钥放在List的前面,以获得每个元素所需订单的索引:

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()));
    }