将C#转换为Java,我该如何处理IEnumerable?

时间:2013-04-12 09:19:44

标签: c# java

我的任务是将一些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中使用哪种数据结构来实现这一目标?

4 个答案:

答案 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>