将整数转换为可迭代对象以方便代码重用

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

varargsArrayList 转换合并允许您以一种很酷的方式创建ArrayList

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

【讨论】:

以上是关于将整数转换为可迭代对象以方便代码重用的主要内容,如果未能解决你的问题,请参考以下文章

python学习-enumerate为可迭代的对象添加序号

迭代器

为啥链式迭代如此复杂?简化此代码

Python 可迭代的对象迭代器和生成器

在角度/打字稿中将类创建为可迭代

将 pandas Dataframe 的行转换为可迭代的字符串列表