将整数转换为可迭代对象以方便代码重用
Posted
技术标签:
【中文标题】将整数转换为可迭代对象以方便代码重用【英文标题】: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));
【参考方案1】:
为什么要使用相同的方法?我认为最好使用两种不同的方法,这就是重载的目的。
当你使用Iterable
时,你必须使用java的自动装箱来创建Integer
,然后创建ArrayList
,这比使用两种不同的方法更糟糕,也让代码更易于阅读。
但是如果你只想使用 Iterable 我会使用这个代码(使用不太可能的代码)或@sisyphus 代码:
length(Arrays.asList(1), Arrays.asList(2));
将varargs
与ArrayList
转换合并允许您以一种很酷的方式创建ArrayList
。
在这里你可以看到工作代码: code Iterable
【讨论】:
以上是关于将整数转换为可迭代对象以方便代码重用的主要内容,如果未能解决你的问题,请参考以下文章