हैं मेरे पास एक जावा 8 स्ट्रीम है जिसमें से मैं (समान रूप से) एक तत्व को यादृच्छिक रूप से चुनना चाहता हूं। स्ट्रीम में शून्य से दस हजार तत्वों के कहीं भी हो सकते हैं।क्या मैं जांच सकता हूं कि जावा 8 स्ट्रीम में कम से कम एन तत्व
मैंने एक एल्गोरिदम लागू किया है जो मैपरेडस-जैसी पैटर्न का उपयोग करके एक का चयन करता है, लेकिन बहुत छोटी धाराओं के लिए यह शायद सूची में आइटम एकत्र करने और यादृच्छिक अनुक्रमणिका के साथ एक को वापस करने के लिए अधिक कुशल होगा। इसके लिए मुझे उन्हें गिनना है, हालांकि। स्ट्रीम में एक गिनती() विधि होती है लेकिन यह उन सभी की गणना करता है, मुझे वास्तव में वास्तविक गिनती में दिलचस्पी नहीं है, मुझे इसकी परवाह है कि यह एक निर्धारित संख्या से अधिक है या नहीं। क्या किसी को पता है कि ऐसी विधि मौजूद है या नहीं? मुझे यह नहीं मिल रहा है लेकिन ऐसा कुछ भी हो सकता है जिसे मैं देख रहा हूं या फिर भी इसे खोजने के लिए कुछ चालाक चाल हो सकता है।
पीएस .: मुझे पता है कि कभी-कभी कोड को अनुकूलित करने के लिए आवश्यक नहीं है; लेकिन मैं अनुभव के लिए, फिर भी कोशिश करना चाहूंगा। मैं एक विद्यार्थी हूं.
पी पी एस: मैं अपने एल्गोरिथ्म यहाँ कॉपी किया है, मामले में किसी को भी रुचि है (या कीड़े के लिए दिखना चाहता है, मैं इसे अभी तक ;-)
stream
.parallel()
.map(t -> new Pair<T, Integer>(t, 1))
.reduce((Pair<T, Integer> t, Pair<T, Integer> u) -> {
if (rand.nextDouble() <= (t.getValue1()/(double) (t.getValue1() + u.getValue1()))) {
return new Pair<>(t.getValue0(), t.getValue1() + u.getValue1());
} else {
return new Pair<>(u.getValue0(), t.getValue1() + u.getValue1());
}
})
.map(t -> t.getValue0());
परीक्षण नहीं किया (जोड़े संगठन से कर रहे हैं। javatuples, अब जावा कार्यात्मक प्रोग्रामिंग का समर्थन करता है जैसे इंटरफेस tuples की कमी थोड़ा दर्दनाक हो जाता है)।
यह देखते हुए कि एक स्ट्रीम केवल एक बार पढ़ने वाली धारा हो सकती है, और यह नहीं जानता कि कोई अन्य तत्व उपलब्ध है या नहीं, जब तक कि यह पढ़ा न जाए, मैं ' टी देखें कि इस तरह की गिनती सभी मामलों में कैसे काम कर सकती है। व्यक्तिगत रूप से मैं आपके एल्गोरिदम को मानचित्र/कम प्रकार के चरण के माध्यम से नहीं लिखूंगा - मैं बस इस तरह के कोड का उपयोग करूंगा: http://stackoverflow.com/questions/966108/choose-random-array-element-sisfisfying-certain-property/966118 # 9 66118 एक इटरेटर के साथ। –
आपके उत्तर के लिए धन्यवाद। मेरे पास यह था, लेकिन मैंने नहीं देखा कि एक धारा को एक पुनरावर्तक में परिवर्तित करना संभव है। सूचक के लिए धन्यवाद। –
"बहुत छोटी धाराओं के लिए यह शायद सूची में आइटम एकत्र करने के लिए अधिक कुशल होगा।" क्यूं कर? –