簡體   English   中英

將C#轉換為Java,我該如何處理IEnumerable?

[英]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.Collectionjava.util.List (后者如果catList肯定是貓的列表)。

重新排序的方式實際上取決於訂購要求。 它可能就像使用Collections.sort(列表列表)一樣簡單

您應該確定所需的數據結構。 基本上,3個偉大的數據結構系列是:

  • 列表 :基於索引的有序集合;

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

  • Map :基於鍵值的集合(C#中的一個字典)。 在這個精確的情況下,這里不適應。

根據您的需要,您應該返回List<Cat>Set<Cat>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM