मेरी स्प्रिंग आवेदन में में एक यादृच्छिक तत्व खोजने बनाम, मैं QuoteOfTheDay
के एक दस्तावेज़ प्रकार के लिए एक काउचआधारित भंडार है। दस्तावेज़ बहुत ही बुनियादी है, बस प्रकार UUID, प्रकार स्ट्रिंग के मान क्षेत्र और के प्रकार के बनाए जाने का दिनांक दिनांक फ़ील्ड का एक आईडी क्षेत्र है।जावा 8 Stream.findAny() धारा
मेरी सेवा वर्ग में, मैं एक विधि है कि दिन के एक यादृच्छिक उद्धरण देता है। शुरू में मैं बस निम्नलिखित है, जो प्रकार Optional<QuoteOfTheDay>
का एक तर्क लौटे कर की कोशिश की है, लेकिन यह प्रतीत होता है कि findAny() काफी हमेशा धारा में एक ही तत्व लौट आते हैं। इस समय केवल 10 तत्व हैं।
public Optional<QuoteOfTheDay> random() {
return StreamSupport.stream(repository.findAll().spliterator(), false).findAny();
}
के बाद से मैं और अधिक यादृच्छिक कुछ करना चाहता था, मैं जिसके बाद सिर्फ एक QuoteOfTheDay
रिटर्न लागू किया।
public QuoteOfTheDay random() {
int count = Long.valueOf(repository.count()).intValue();
if(count > 0) {
Random r = new Random();
List<QuoteOfTheDay> quotes = StreamSupport.stream(repository.findAll().spliterator(), false)
.collect(toList());
return quotes.get(r.nextInt(count));
} else {
throw new IllegalStateException("No quotes found.");
}
}
मैं सिर्फ उत्सुक कैसे स्ट्रीम के findAny()
विधि वास्तव में काम करता है के बाद से यह यादृच्छिक होना प्रतीत नहीं होता हूँ।
धन्यवाद।