【问题标题】:Can you pass an ArrayList as a command line argument for a java program您可以将 ArrayList 作为 java 程序的命令行参数传递吗
【发布时间】:2017-07-01 20:13:18
【问题描述】:

我正在尝试通过命令行参数将 BigIntegers 的 ArrayList 作为输入传递给 java 程序。

我理解这样调用程序:

java myProgram one two

args[0] = "one"
args[1] = "two"

但如果我要这样运行程序

java myProgram arrayList 

如何将此 Arraylist 的 String[] 表示形式转换回 ArrayList<BigInteger>

arrayList 将从一个单独的 java 文件返回,该文件返回 BigInetegr 的 arrayList,我可以使用该 java 程序作为这个的输入吗?

我对如何处理这件事有点困惑。

谢谢!

【问题讨论】:

  • 命令行参数是字符串。因此String[]。只需解析它们。我想您可以将序列化的ArrayList<BigDecimal> 转储到文件中,然后将其通过管道传输到 STDIN?但是,没有太多理由。
  • 你想让"one"变成1吗?还是您要将实际的十进制字符串传递给您的程序,即"123"

标签: java arraylist input command arguments


【解决方案1】:

只要您将实际的十进制字符串传递给您的程序,例如java myProgram 123 456.

List<BigInteger> bigInts = new ArrayList<>(args.length);
for(int i = 0; i < args.length; i++)
    bigInts.add(new BigInteger(args[i]));

或使用 Java 8 流:

List<BigInteger> bigInts = Arrays.stream(args)
                            .map(BigInteger::new)
                            .collect(Collectors.toList());

但是,如果您要向程序传递单词,那么有两件事,您将需要一个自定义函数来将英文单词解析为 BigInteger,而且我怀疑是否有人会输入一个足够大的整数,需要 BigInteger .

【讨论】:

  • 如果 OP 特别想要 ArrayList,可能值得使用 Collectors.toCollection(ArrayList::new)。此外,three billion 太大而无法放入int - 有时单词可能非常简洁。无论如何,+1
  • @BoristheSpider 没错,但我没有提到intthree billion 适合long
  • 嗯,long 的最大值仅为 9 和四分之一 quintillion 左右。 (美国“小规模”)
  • @BoristheSpider 当然可以用不多的话来溢出它:googleplex!我仍然怀疑这是一个可能的用例。我怀疑他们需要ArrayList
  • @BoristheSpider 刚刚注意到 Java 8 中有 unsigned long,所以这是 18.5 quintillion。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多