2010-05-17 11 views
5

मैंक्या मैं एक सूची पूछ सकता हूं? जावा

List<SomeObject> objList = new ArrayList<SomeObject>(); 

है someObject एक क्षेत्र नामित आईडी में शामिल है, तो कहो। हम इसे सूची के माध्यम से पाशन wihout

objList.filter('id=2');

जैसे कुछ क्वेरी के माध्यम से मिल सकता है? यदि नहीं, तो क्यों? यह बहुत उपयोगी विधि हो सकती है और लूप के लिए थकाऊ लिखने के विकल्प के रूप में उपयोग की जा सकती है?

बस एक सवाल है कि मेरे दिमाग में आया था तो मैं मैं इसे यहाँ अग्रिम :) में साफ करना होगा :)

धन्यवाद सोचा

+0

देखें http://stackoverflow.com/questions/122105/java-what-is-the-best-way-to-filter-a-collection – YuppieNetworking

+0

धन्यवाद यूप्पी। आपका सबसे प्रासंगिक उत्तर है। – TCM

+1

आप इस लाइब्रेरी का उपयोग करते समय objList.select (idEqualTo (2)) कर सकते हैं https://github.com/nicholas22/jpropel-light। आपको फ़ंक्शन idEqualTo() को परिभाषित करना है, लेकिन यह एक-लाइनर है। –

उत्तर

1

आप जावा के लिए LINQ की तरह कुछ चाहते हैं, बाहर की जाँच quaere


संपादित करें: इस बिंदु पर, पता लगाना लगता है कि उस unmaintained है। जावा 7 के साथ ईओएल होने के साथ, आपको जावा 8 पर होना चाहिए जिसकाआपको लिंक के डॉट सिंटैक्स की तुलना में सबसे अधिक रास्ता मिलना चाहिए। कुछ उदाहरणों के लिए this page देखें।

+1

स्टाइलिश, अंत में धीमी, अंतर्निहित पाश शामिल है – p4553d

2

यहां तक ​​कि अगर इस भाषा के एक समर्थित विशेषता थी, तो यह हो सकता है जावा जिसे पुनरावृत्त करने की आवश्यकता होगी, तो आप स्क्वायर वन पर वापस आ सकते हैं (समय जटिलता के मामले में)।

जो आप खोज रहे हैं वह संबद्ध मैपिंग है। यह हैश मैप के साथ हासिल किया जा सकता है। यदि आप उदाहरण आईडी और नाम के लिए एक से अधिक प्रकार की संपत्ति से संबद्ध होना चाहते हैं, तो आप दो हैश मैप्स बना सकते हैं, जिनकी कुंजी आईडी है और जिनकी कुंजी नाम है।

यदि आप कई गुणों के लिए पूछना चाहते हैं तो यह निश्चित रूप से बहुत अच्छी तरह से स्केल नहीं करता है, इसलिए अगला चरण ऑब्जेक्ट उन्मुख डेटाबेस जैसे हाइबरनेट का उपयोग करेगा जो आपको ऑब्जेक्ट्स के लिए डेटाबेस से पूछताछ करने की अनुमति देगा उदाहरण।

+0

ठीक है, मैं समय चलने के बारे में चिंतित नहीं हूं। मैं अपने कोडिंग समय (मेरी उत्पादकता) के बारे में अधिक चिंतित हूं। बस एक अतिरिक्त विधि कॉल मेरे आवेदन को दुर्भाग्य से धीमा करने वाला नहीं है। और मैं हैशटेबल प्रकार की डेटा संरचना का उपयोग नहीं करना चाहता हूं। असल में मैं कुछ ऐसा चाहता हूं जो लिंकक में प्रदान करता है। नेट जहां आप सीधे संग्रह संग्रह कर सकते हैं – TCM

+0

@Nitesh, क्षमा करें .NET से परिचित नहीं है। लेकिन आप जावा में किसी संग्रह को अपने उदाहरण के रूप में नहीं पूछ सकते हैं (कुछ तृतीय पक्ष ढांचे या पुस्तकालय जो ऐसा करते हैं)। –

2

कम: नहीं, तुम नहीं

लंबे सकते हैं: आप वस्तु के स्वयं के डेटा संरचना और हैश/सूचकांक क्षेत्रों कुछ अधिक कुशल खोज के लिए लिख सकते हैं। लेकिन यह एक सूची नहीं है, अधिक HashMap या तो।

8

कार्यात्मक, अच्छी तरह से कार्यक्षमता वाले पुस्तकालय functionaljava जैसे विधियां प्रदान करते हैं।

आपको अपने List कार्यान्वयन का उपयोग करना होगा जो देशी जावा (Array)List के बीच असंगत है या दोनों के बीच कनवर्ट करें।

एक उदाहरण:

import fj.data.Java 
import fj.data.List 
import fj.F 

// Converting an ArrayList 
fj.data.List<SomeObject> objList2 = Java.ArrayList_List().f(objList); 

fj.data.List<SomeObject> filteredObjList = objList2.filter(new F<SomeObject, Boolean>() { 
    Boolean f(SomeObject c) { return c.id == 2; } 
}); 

// Converting back to ArrayList 
java.util.List<SomeObject> objList2 = Java.List_ArrayList().f(filteredObjList); 

का उपयोग कर functionaljava के List अपनी परियोजना से बाहर के माध्यम से परिवर्तित करने से बच जाएंगे करके।

2

शायद यह किसी को मदद मिलेगी,

http://code.google.com/p/joquery/

इस पुस्तकालय का समर्थन करता है कोड संरचना निम्नलिखित,

Filter<Dto> query = CQ.<Dto>filter(testList) 
    .where() 
    .property("id").eq().value(1); 
Collection<Dto> filtered = query.list(); 
संबंधित मुद्दे

 संबंधित मुद्दे