[英]Converting C# to Java, how do I handle IEnumerable?
我的任務是將一些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中使用哪種數據結構來實現這一目標?
這取決於你想要對返回值做什么。
Java沒有LINQ,因此使用除了foreach
循環之外的Iterable<T>
有點像PITA。 這篇博文更詳細地描述了它。
另一種方法是返回Collection<T>
。
話雖如此,返回Iterable<T>
並沒有錯,它只會使得在某些情況下消耗返回值變得更加困難。
在Java中,您將使用List<T>
的實現,如ArrayList<T>
用於方法內的臨時實例。 如果要從方法返回該實例,則返回類型將是接口List<T>
或Collection<T>
。
你可以做類似Collections.sort(list)的事情; 如果在對象上實現Interface Comparable(類似於c#和IComparer)
“當你反復遍歷它們時添加項目,”我希望你並不真正意味着我在想你的意思......有很多排序算法。
當你需要使用它時 ,Iterable沒有任何問題。
但是,考慮到上面代碼告訴我的內容,我認為你最好選擇java.util.Collection或java.util.List (后者如果catList肯定是貓的列表)。
重新排序的方式實際上取決於訂購要求。 它可能就像使用Collections.sort(列表列表)一樣簡單
您應該確定所需的數據結構。 基本上,3個偉大的數據結構系列是:
列表 :基於索引的有序集合;
集合 :不包含重復元素的集合;
Map :基於鍵值的集合(C#中的一個字典)。 在這個精確的情況下,這里不適應。
根據您的需要,您應該返回List<Cat>
或Set<Cat>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.