जैसे SQL परिणामसेट का इलाज करना जब मैं डेटाबेस से पूछता हूं और एक (केवल-पढ़ने के लिए, केवल-पढ़ने के लिए) परिणाम प्राप्त करता हूं, तो ResultSet डेटाबेस पंक्तियों की सूची की तरह कार्य करता है।स्केल स्ट्रीम
मैं इस परिणामसेट को स्केल Stream
की तरह इलाज करने का कोई तरीका ढूंढने की कोशिश कर रहा हूं। यह रैम की बड़ी मात्रा में उपभोग नहीं करते समय filter
, map
, आदि जैसे परिचालनों की अनुमति देगा।
मैं अलग-अलग आइटम को निकालने के लिए एक पूंछ पुनरावर्ती पद्धति लागू है, लेकिन यह है कि सभी आइटम एक समस्या एक ही समय में स्मृति में हो, अगर ResultSet बहुत बड़ी है की आवश्यकता है:
// Iterate through the result set and gather all of the String values into a list
// then return that list
@tailrec
def loop(resultSet: ResultSet,
accumulator: List[String] = List()): List[String] = {
if (!resultSet.next) accumulator.reverse
else {
val value = resultSet.getString(1)
loop(resultSet, value +: accumulator)
}
}
आप आप क्या चाहते करने के लिए एक स्ट्रीम के बजाय एक Iterable का उपयोग किया जा सका: उदाहरण के लिए, सभी आईडी के रूप में नीचे दिखाया गया है? –
इसके अलावा एक स्ट्रीम मेमोरी में मानों को बनाए रखेगी, इसलिए जब आप सूची के अंत तक पहुंच जाएंगे तब तक आप वास्तव में स्मृति को सहेज नहीं पाएंगे। –
मुझे लगता है कि जेडीबीसी ध्वज/विकल्प के बिना जेडीबीसी स्वयं परिणामों को स्ट्रीम करता है, आपके पास अभी भी आपके जेडीबीसी एपीआई द्वारा निर्मित मेमोरी में डेटा की एक पूर्ण प्रति है। – matanster