【问题标题】:converting an integer into an iterable object to facilitate code reuse将整数转换为可迭代对象以方便代码重用
【发布时间】:2016-03-10 19:47:14
【问题描述】:

我正在创建一个需要支持两种方法的数据类型:

length(int v, int w) 
length(Iterable<Integer> v, Iterable<Integer> w)

第一个是第二种方法的特例,我想重用代码。如何有效地将整数转换为 Iterable 对象?

到目前为止,我使用了一个 ArrayList。

ArrayList<Integer> a = new ArrayList<Integer>(); a.add(v);
ArrayList<Integer> b = new ArrayList<Integer>(); b.add(w);
return length(a,b);

谢谢。

【问题讨论】:

  • 这两种方法的作用是什么?
  • 在这种特殊情况下,它返回两个节点或两组节点之间的最短路径的长度。但这个问题是针对一般情况的。
  • 你的解决方案有什么问题?
  • 您可以使用 Collections.singleton() 库方法将单个对象转换为该对象的可迭代对象。所以你的 3 行解决方案变成了单行 length(Collections.singleton(v), Collections.singleton(w));

标签: java arraylist integer overloading iterable


【解决方案1】:

为什么要使用相同的方法?我认为最好使用两种不同的方法,这就是重载的目的。 当你使用Iterable时,你必须使用java的自动装箱来创建Integer,然后创建ArrayList,这比使用两种不同的方法更糟糕,也让代码更易于阅读。 但是如果你只想使用 Iterable 我会使用这个代码(使用不太可能的代码)或@sisyphus 代码:

length(Arrays.asList(1), Arrays.asList(2));

将varargs 与ArrayList 转换合并允许您以一种很酷的方式创建ArrayList。

在这里你可以看到工作代码: code Iterable

【讨论】:

    猜你喜欢
    • 2015-02-21
    • 2017-12-30
    • 2011-10-03
    • 2018-09-28
    • 2015-08-22
    • 2021-02-11
    • 2021-10-16
    • 2016-08-12
    • 2011-09-20
    相关资源
    最近更新 更多