Jinq का उपयोग कर सेट खोज करने के लिए कैसे

वोट
1

मैं संग्रह है Set<Tag>मेरी इकाई वर्ग में। Tagवर्ग केवल शामिल Long idऔर Stringमूल्य। इम खोजने की कोशिश Placeद्वारा Tagलेकिन im त्रुटि मिल रही हैCould not analyze lambda code

    String name = places.getTag().getName();
    if (name != null) {
        stream = stream.where(p -> p.getTags().iterator().next().getName().equals(name));
    }

यह तंग और सुरुचिपूर्ण बनाने के लिए तरीका है? मैं जानता हूँ कि मेरे कोड गलत है, और im त्रुटि मिल रही है Jinq शायद कुछ इस तरह का समर्थन नहीं करता क्योंकिp.getTags().iterator().next().getName()

07/09/2015 को 13:11
उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
1

मैं तुम्हें स्कीमा से परिचित नहीं हूँ, लेकिन हो सकता है आप एक कुछ इस तरह के साथ अपने डेटा संरचनाओं समतल में शामिल होने के कर सकता है:

stream
   .joinList( p -> p.getTags() )
   .where( pair -> pair.getTwo().getName().equals(name) );

फिर, यह अपने डेटाबेस स्कीमा और संस्थाओं पर निर्भर करता है, लेकिन अगर आप सही रिश्तों सेटअप है, तो आप कुछ इस तरह से और भी आसान हो सकता है:

tagStream
   .where( tag -> tag.getName().equals(name) )  // get the right tag
   .selectAllList( tag -> tag.getPlaces() )     // get all places with that tag

यदि आप एक में शामिल होने हालांकि उपयोग नहीं कर सकते हैं, तो आप एक सबक्वेरी उपयोग करने का प्रयास कर सकते हैं, लेकिन सबक्वेरी थोड़ी अलग जेपीए प्रदाताओं पर finnicky व्यवहार करते हैं। सबक्वेरी के लिए, बस सुनिश्चित सबक्वेरी एक सामान्य प्रश्न के रूप में एक ही प्रारूप में है।

stream = stream
   .where(p -> JinqStream.from(p.getTags())
      .where( tag -> tag.getName().equals(name) )
      .count() > 0);
08/09/2015 को 17:27
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more