3
A
回答
13
如果您已經在使用Google的Guava圖書館,它有一個Collections2.filter()方法,該方法將只返回與給定的Predicate匹配的集合中的那些項目。
但是,這是否回答您的問題取決於您的動機是爲了避免循環。由於Java集合沒有內置此功能,因此只能以某種級別遍歷所有元素。 Guava在內部執行此操作,但它仍然在執行與手動操作相同的循環,只是穿着更好的API。
1
您可以使用Apache公共庫中的Collections
方法。然而這些方法只是爲你做循環。當你試圖做你需要的東西時,你無法避免它。
1
這些功能類似於替代品,它使您的代碼變得簡單易懂,但它們在內部可能需要遍歷列表。但是如果有機會,客戶端可能並不總是使用這種方法,他們會懶惰執行過濾。
檢查過濾器(...)方法適合你:Iterables.filter(Iterable, Predicate)
0
在一定程度上,循環將不可避免地被捲入。
如果兩個數據結構都是列表,那麼成本將與2個列表長度的PRODUCT成比例。如果名單很大,這可能非常昂貴。
爲了避免這種情況,需要使用某種數據結構來表示其中的一個或兩個列表,這些數據結構的查找速度比簡單列表快。
1
我建議2個解決方案
從 jakarta collection framework使用謂詞。
可能有不同的謂詞。您可以將它們組合起來並創建非常複雜的濾鏡閱讀我的文章:http://java.dzone.com/articles/useful-abuse, 搜索子標題「過濾器模式的實現」。
我希望這會幫助你。
0
使用谷歌的collections libray:
List result1 = Lists.newArrayList(Collections2.filter(originalList,filterPredicate));
List result2 = Lists.newLinkedList(Collections2.filter(originalList,filterPredicate));
雖然這些給你做一個適當的名單,他們立即招致存儲開銷和迭代時間開銷。如果你寧願推遲那(「懶」的評價),你可以使用一個可迭代或迭代器串行訪問:
Iterable result3 = Iterables.filter(originalList,filterPredicate)); // Pangea's solution
Iterator result4 = Iterators.filter(originalList.iterator(),filterPredicate));
(我離開類型參數作爲練習讀者。)
相關問題
- 1. Java:存儲和訪問對象列表的最佳方法
- 2. 使用Java中的對象列表迭代對象的最佳方法
- 3. 用多個標準篩選列表的最佳選擇算法?
- 4. Java:什麼是讀取序列化對象的最佳方法?
- 5. 在Java中對象XML序列化的最佳方法
- 6. 在WPF中維護業務對象列表的最佳方法
- 7. 在memcache中緩存對象列表的最佳方法
- 8. 在ASP.Net中存儲對象列表的最佳方法MVC
- 9. 基於選定的多個複選框篩選列表的最佳方式
- 10. Java對象複製最佳選項?
- 11. 從Django模型對象列表中過濾對象的最佳方法
- 12. 爲JQGrid序列化JSON對象的最佳/最快方法
- 13. 合併ActiveRecords對象的最佳方法?
- 14. 獲取iframe對象的最佳方法
- 15. 保存父對象的最佳方法
- 16. 在HTML多選列表中選擇選項的最佳方法
- 17. 從Dojo中的對象列表創建表的最佳方式?
- 18. 導軌篩選最佳做法
- 19. 更新Java對象的多個字段的最佳方法
- 20. Java中的對象列表之間的最佳差異
- 21. 在Java中篩選列表
- 22. 在java中驗證對象的最佳方法
- 23. 將json映射到Java對象的最佳方法
- 24. Google Search Appliance - 篩選文件類型的最佳方法
- 25. C++篩選流中字節的最佳方法
- 26. 篩選大型數據集的最佳方法
- 27. 用REST進行通用篩選/排序的最佳方法
- 28. (Python)篩選字符串中特定術語的最佳方法?
- 29. ServerSocket的最佳方法Java
- 30. Kinect 2對象追蹤最佳方法
我修復並格式化(斷開)鏈接。Javadoc方法鏈接包含需要轉義的字符。此外,Google Collections現在是Guava的一部分。 – 2010-11-18 14:45:44