可能重複:
Combine multiple Collections into a single logical Collection?Java方法訪問多個集合爲一體,沒有加入
我有很多的小集合,我想訪問的全過程。
我可以例如創建一個新的LinkedList
並添加所有元素。但我想,可能有一些工具可以添加完整的Collections
,而無需重新鏈接每個項目。我不是在談論addAll
。 Collections
將保持獨立,但只有外部似乎是一個。
任何想法?
可能重複:
Combine multiple Collections into a single logical Collection?Java方法訪問多個集合爲一體,沒有加入
我有很多的小集合,我想訪問的全過程。
我可以例如創建一個新的LinkedList
並添加所有元素。但我想,可能有一些工具可以添加完整的Collections
,而無需重新鏈接每個項目。我不是在談論addAll
。 Collections
將保持獨立,但只有外部似乎是一個。
任何想法?
Google Guava項目有一個名爲Iterators
的類,它提供了用於獲取迭代器並將變換應用於它們的實用程序。他們提供的函數之一叫做Iterators.concat
,它接受多個迭代器併產生一個迭代器來迭代這些單個迭代器的連接。這可能不是您正在尋找的內容,但它可以爲您提供跨多個元素迭代的功能,而無需重複所有元素。
您可能需要考慮的一個問題是,如果您嘗試對該集合進行變異,則在您使用集合時會發生什麼情況。例如,如果你添加一個元素,它會去哪裏?如果你需要的只是迭代,你不需要考慮這個問題,那麼Iterators.concat
方法可能就是你要找的。
在標準的Java中,最好的辦法是創建一個集合集合。
如果你要採取 「番石榴」,你可以使用 「可迭代」 創造這樣一個東西:
PS: 「嗨!」 說給格雷戈爾薩姆薩給我!
查看Google Guava庫,其中包含一個Iterators
類,其中包含許多有用的靜態方法。在這種情況下,您可以使用concat
將每個小集合上的迭代器合併爲一個遍歷所有集合的迭代器。
// First collection.
List<String> l = new LinkedList<String>();
l.add("Hello");
l.add("Hi");
// Second collection.
Set<String> s = new HashSet<String>();
s.add("Goodbye");
// Combine iterators over both collections.
Iterator<String> it = Iterators.concat(l.iterator, s.iterator());