Drools

2012-02-24 19 views
10

में किसी सूची में विशिष्ट तत्व की जांच करें, मैंने अभी ड्रूल्स (संस्करण 5.1.0) का उपयोग करना शुरू कर दिया है, इसलिए कृपया इस प्रश्न का उत्तर देने के मामले में मेरे साथ सहन करें।Drools

class A { 
    String name; 
    String Value;} 

सूची के साथ-साथ उसके तत्वों Drools इंजन के काम स्मृति में हैं:

मैं एक java.util.List वस्तु जो जटिल प्रकार एक की वस्तुओं एक के रूप में के साथ, शामिल है। क्या नियम में आग लगाने का कोई आसान तरीका है यदि सूची में किसी तत्व का नाम और मान विशिष्ट मानों से मेल खाता हो?

वर्तमान में, मैं ड्रॉल्स नियम के अंदर एक स्व-परिभाषित फ़ंक्शन का उपयोग कर रहा हूं, जो सूची में पुनरावृत्त होता है और यदि कोई तत्व है जो विनिर्देश से मेल खाता है, तो मुझे आश्चर्य होता है, हालांकि मुझे आश्चर्य है कि यह सबसे कुशल और आसान उपयोग है या नहीं।

उत्तर

14

एक उदाहरणों काम स्मृति में हैं, तो के रूप में आप कहते हैं कि (आदर्श परिदृश्य), बस इसे का उपयोग कर नियम लिखें:

rule X 
when 
    A(name == "bob", value == 10) 
... 

सम्मिलित संग्रह (सूचियों, पेड़, आदि) काम कर स्मृति में सीधे है अनुशंसित नहीं है, क्योंकि वे किसी भी आंतरिक अर्थात् संलग्न किए बिना सार डेटा संरचनाएं हैं। लेकिन मान लें कि आपके पास एक व्यक्ति वर्ग है, जिसमें पते की एक सूची है, और आप अपने आप को फॉक्स के रूप में संबोधित किए बिना मॉन्ट्रियल, कनाडा में प्रत्येक पते के लिए नियम निष्पादित करना चाहते हैं। आप लिख सकते हैं:

rule X 
when 
    Person($addresses : addresses) 
    Address(city == "Montreal", country == "CA") from $addresses 
... 

अंत में, आप वास्तव में एक तथ्य यह है (फिर से, खराब व्यवहार का), आप निम्न कर सकते हैं के रूप में सूची में ही उपयोग करना चाहते हैं, लेकिन ध्यान रखें कि यह काम स्मृति में सभी सूचियों से मिलान करेगा :

rule X 
when 
    $list : List() 
    A(name == "bob", value == 10) from $list 
... 
+1

+1 मुझे अनिवार्य रूप से उसी उत्तर के साथ पंच को मारने के लिए +1 जो मैं लिखने के बीच में था। – mike9322

+0

उत्तर के लिए धन्यवाद – serena

+0

@Edson Tirelli मैं एक लूप से कैसे टूट सकता हूं। प्रत्येक पते के लिए कहें, मेरे पास एक ऐसा कार्य है जो मुझे बूलियन देता है; इसलिए मैं 'व्यक्ति ($ पते: पते) करता हूं; $ ए: पता() $ पते से; eval ($ e.returnBoolean()); ' 'फिर // कुछ करें;' अब अगर eval प्राप्त करने के बाद; यदि यह सत्य है; यह कुछ करता है 'और फिर मैं लूप से बाहर निकलना चाहता था। मैं उसे करके देखूं तो? – Kraken