java - 如何保留帮助部分中的参数顺序?

标签 java apache-commons-cli

我有以下参数要添加到 CLI
-sbx
-CSWConfig
-stripInfo
-modelSources
-catchArchive
-sw供应商名称
-modelsSWExchnage

但是在显示帮助时,它按排序顺序显示这些选项(如下所示),这是我不想要的,我希望所有选项在添加时都按顺序排列。
-CatchArchive
-CSWConfig
-modelSources
-sbx
-stripInfo
-sw供应商名称

我读过一篇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);
}

最佳答案

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

关于java - 如何保留帮助部分中的参数顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26256420/

相关文章:

apache-commons-cli - commons-cli 依赖参数

java - Apache 公共(public) CLI : replacement for deprecated OptionBuilder?

java - Apache 命令行解析器错误?

java - 使用 commons-cli 创建子命令

java - 为什么Java中的抽象类有构造函数?

java - 使用Java并发API建模动态数据流的技术

java - 错误 : This fragment should provide a default constructor (a public constructor with no arguments)

java - 对第二个单词进行排序

java - 从 main() 方法中获取可执行 jar 的名称

Java Swing 拖放并弹出对话框