我的任务是将一些C#代码转换为Java。大部分都很好,但我在解决如何翻译IEnumerable方面遇到了一些麻烦。
我在C#中的代码是:
public IEnumerable<Cat> Reorder(IEnumerable<Cat> catList)
{
// some logic that reorders the list
}
我的谷歌搜索建议我应该使用Iterable<Cat>
作为替代。但是,我还偶然发现了一些事情,说你永远不应该Iterable<T>
作为返回类型。
我对Java中的数据结构有点不熟悉。我应该返回什么,以及如何重新订购一组对象?
在C#中,假设您不使用linq,您将创建一个空数组或List或类似数据,并在重复迭代它们时添加项目,检查条件。我将在Java中使用哪种数据结构来实现这一目标?
答案 0 :(得分:3)
这取决于你想要对返回值做什么。
Java没有LINQ,因此使用除Iterable<T>
循环内部之外的foreach
有点像PITA。 This blog post更深入地描述了它
另一种方法是返回Collection<T>
话虽如此,返回Iterable<T>
并没有错,它只会使得在某些情况下消耗返回值变得更加困难。
在Java中,您将使用List<T>
的实现,如ArrayList<T>
,用于方法内的临时实例。如果要从方法返回该实例,则返回类型将是接口List<T>
或Collection<T>
。
答案 1 :(得分:1)
您可以执行类似Collections.sort(list)的操作;如果你在你的对象上实现了一个Interface Comparable(可以用c#和IComparer来完成)
“在重复迭代时添加项目,”我希望你并不真正意味着我在想你的意思......有很多排序算法。
答案 2 :(得分:0)
Iterable没有问题,当你需要使用它时。
但是,考虑到上面代码告诉我的内容,我认为你最好选择 java.util.Collection 或 java。 util.List (后者如果catList肯定是猫的列表)。
重新排序的方式实际上取决于订购要求。它可能就像使用 Collections.sort(列表列表)
一样简单答案 3 :(得分:0)
您应该确定所需的数据结构。 基本上,3个伟大的数据结构系列是:
列表:基于索引的有序集合;
设置:不包含重复元素的集合;
地图:基于键值的集合(C#中的字典)。在这个精确的案例中并没有适应。
根据您的需要,您应该返回List<Cat>
或Set<Cat>
。