سؤال

وهنا ما أقوم به:لدي حدث من آر إس إس أن تقول لي أن تم تحرير تذكرة.للحصول على التغييرات التي تم إجراؤها على تلك التذكرة ، يجب أن أتصل بخدمة الراحة.

لذلك أردت أن أفعل ذلك بنهج وظيفي أكثر إحكاما ، لكنه تحول للتو إلى مجموعة من الجنون.عندما تكون في الواقع ، جافا النمط القديم على التوالي هو هذا بسيط:

/**
 * Since the primary interest is in what has been changed, we focus on getting changes
 * often and pushing them into the appropriate channels.
 *
 * @return changes made since we last checked
 */
public List<ProcessEventChange> getLatestChanges(){
    List<ProcessEventChange> recentChanges = new ArrayList<>();
    List<ProcessEvent> latestEvents = getLatestEvents();
    for (ProcessEvent event : latestEvents){
        recentChanges.addAll(getChanges(event));
    }
    return recentChanges;
}

كان هناك سؤالان هنا متعلقان بهذا لا يبدو أن لهما إجابات مباشرة ، فأنا أطرح هذا السؤال حتى يكون هناك مثال محدد للغاية والسؤال واضح تماما:هو العمل إعادة صياغة هذا مع تيارات وإذا كان الأمر كذلك كيف?

إذا تيارات ليست جيدة لأشياء من هذا القبيل فهي في الحقيقة ليست جيدة لكثير.السبب أقول أن هذا هو شرط شائع جدا:أن يتم إثراء بعض البيانات بمزيد من المعلومات من مصدر آخر.

هل كانت مفيدة؟

المحلول

ما تحتاجه هو فلاتماب ، والتي يمكن تعيين واحد ProcessEvent كائن من قائمة الإدخال إلى متعددة ProcessEventChange الكائنات ، وتتسطح كل تلك الكائنات إلى تيار واحد من ProcessEventChange.

List<ProcessEventChange> recentChanges = getLatestEvents().
         stream().
         flatMap(e -> getChanges(e).stream()).
         collect(Collectors.toList());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top