से अपवाद को पकड़ें मेरे पास एक सीएसवी फ़ाइल से स्ट्रिंग सरणी के रूप में स्तंभों का एक गुच्छा है। अब मैं उन्हें पार्स करना चाहता हूं। चूंकि इस पार्सिंग को तारीख पार्सिंग की आवश्यकता होती है और अन्य इतनी तेजी से पार्सिंग तकनीक नहीं होती है, मैं समांतरता के बारे में सोच रहा था (मैंने इसे समय दिया, इसमें कुछ समय लगता है)। मेरे सरल दृष्टिकोण:समांतर धारा
Stream.of(columns).parallel().forEach(column ->
result[column.index] = parseColumn(valueCache[column.index], column.type));
कॉलम ColumnDescriptor
तत्व है जो बस दो गुणधर्म हैं स्तंभ अनुक्रमणिका पार्स किया जा सकता और प्रकार है जो कि यह कैसे पार्स करने के लिए परिभाषित करता है शामिल हैं। और कुछ नहीं। नतीजा एक ऑब्जेक्ट सरणी है जो परिणामी सरणी लेता है।
समस्या अब यह है कि पार्स फ़ंक्शन एक पारसी अपवाद फेंकता है, कि मैं कॉल स्टैक को आगे बढ़ाता हूं। चूंकि हम यहां समानांतर हैं, इसलिए इसे फेंक नहीं दिया जा सकता है। इसे संभालने का सबसे अच्छा तरीका क्या है?
मेरे पास यह समाधान है, लेकिन मैं इसे पढ़ने के लिए क्रिंग कर रहा हूं। ऐसा करने का एक बेहतर तरीका क्या होगा?
final CompletableFuture<ParseException> thrownException = new CompletableFuture<>();
Stream.of(columns).parallel().forEach(column -> {
try {
result[column.index] = parseColumn(valueCache[column.index], column.type);
} catch (ParseException e) {
thrownException.complete(e);
}});
if(thrownException.isDone())
//only can be done if there is a value set.
throw thrownException.getNow(null);
नोट्स: मुझे सभी अपवादों की आवश्यकता नहीं है। अगर मैं उन्हें अनुक्रमिक रूप से पार्स करता हूं तो मैं भी वैसे भी एक प्राप्त करूंगा। तो यह ठीक है।
मेरे लिए यह पठनीय अन्य संभावना है जिसे मैं दबाए गए अपवादों के बारे में सोच सकता हूं ताकि आप कॉलम नंबर भी स्टोर कर सकें लेकिन स्टैक ट्रेस विशाल हो जाएगा, addsuppressed विधि सिंक्रनाइज़ भी हो सकती है या बस उपयोगकर्ता के अनुकूल संदेश का निर्माण कर सकती है – HRgiger
मुझे लगता है कि यह अधिक है प्रयोग, क्योंकि यह असंभव है कि पार्सिंग सीएसवी फ़ाइल से बनाम बनाम एक महत्वपूर्ण मात्रा ले रही है (यानी, यह समयपूर्व अनुकूलन है)। यदि आपने फ़ाइल को पढ़ने के दौरान पार्स किया है, तो आपको शायद यह पता चल जाएगा कि रीडिंग खत्म होने पर सब कुछ पार्स किया गया है। – john16384
डेटा पढ़ने एक बार ऑपरेशन है।लेकिन पार्सिंग विल को अलग-अलग सेटिंग्स के साथ बार-बार किया जाना चाहिए। यही कारण है कि मैं उस हिस्से को अनुकूलित करना चाहता हूं। – findusl