1

我的任务是将一些 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

4 回答 4

3

这在一定程度上取决于您想对返回值做什么。
Java 没有 LINQ,所以Iterable<T>在循环中使用 otherforeach有点像 PITA。这篇博客文章更深入地描述了它。
另一种方法是返回一个Collection<T>.
话虽如此,返回 anIterable<T>并没有错,只是在某些情况下更难使用返回值。

在 Java 中,您可以对方法内的临时实例使用List<T>like的实现。ArrayList<T>当您想从方法返回该实例时,返回类型将是 interfaceList<T>Collection<T>.

于 2013-04-12T09:24:33.270 回答
1

你可以做类似 Collections.sort(list); 如果你在你的对象上实现了一个接口 Comparable(类似的可以用 c# 和 IComparer 完成)

“在反复遍历它们时添加项目,”我希望你的意思不是我想的那样......有很多排序算法。

于 2013-04-12T09:25:24.200 回答
0

您应该确定所需的数据结构。基本上 3 个伟大的数据结构系列是:

  • List:一个有序的基于索引的集合;

  • Set:不包含重复元素的集合;

  • Map:基于键值的集合(C# 中的字典)。在这种精确的情况下,这里不适用。

根据您的需要,您应该返回List<Cat>Set<Cat>

于 2013-04-12T09:29:59.833 回答
0

当你需要使用Iterable 时,它​​没有任何问题。

但是,考虑到上面的代码告诉我的内容,我认为您最好使用java.util.Collectionjava.util.List(如果 catList 绝对是猫列表,则后者)。

重新排序的方式实际上取决于排序要求。它可能就像使用Collections.sort(List list)一样简单

于 2013-04-12T09:27:01.327 回答