شروحات الكمبيوتر والإنترنت والموبايل

Java Stream: إنشاء قائمة جديدة مع خصائص فارغة عند التكرار

في هذا المقال، سنتناول كيفية استخدام Java Stream لإنشاء قائمة جديدة من الكائنات مع تعيين الخصائص إلى القيم الفارغة عند المقارنة مع العنصر السابق. تكمن أهمية هذا الموضوع في القدرة على معالجة البيانات بكفاءة، مما يسهل التعامل مع المعلومات المتكررة بطريقة أكثر فاعلية. سنقوم بتحليل كيفية تحقيق ذلك خطوة بخطوة، وسنوضح الحل البرمجي المناسب لهذه المشكلة.

دور Java Stream في معالجة البيانات

Java Stream هو مفهوم حديث في Java يسمح بتدفق البيانات بطريقة سلسة وفعّالة. يمكن استخدامه بشكل خاص في معالجة البيانات، حيث يمكن من تنفيذ عمليات الترشيح والتجميع والتحويل بسرعة وسهولة. في هذه المقالة، سنستخدم Java Stream لإنتاج قائمة جديدة حيث يتم تعيين الخصائص المتكررة إلى القيم الفارغة، كما هو موضح في المثال التالي.

البيانات الأولية والكائنات

لدينا مجموعة من الكائنات تمثل سجلات من قاعدة بيانات باستخدام Hibernate Envers. يتم تخزين هذه السجلات في قائمة تدعى systemAuditList. يبدو أن السجلات لديها عدة خصائص مثل descriptionFieldA وdescriptionFieldB وdescriptionFieldC. القائمة المبدئية تتضمن السجلات التالية:

List<SystemAudit> systemAuditList = new ArrayList<>();
systemAuditList.add(new SystemAudit(0, "A0", "B0", "C0"));
systemAuditList.add(new SystemAudit(1, "A0", "B1", "C0"));
systemAuditList.add(new SystemAudit(2, "A0", "B1", "C0"));
systemAuditList.add(new SystemAudit(3, "A1", "B1", "C0"));
systemAuditList.add(new SystemAudit(4, "A1", "B2", "C0"));
systemAuditList.add(new SystemAudit(5, "A1", "B2", "C0"));
systemAuditList.add(new SystemAudit(6, "A2", "B2", "C0"));
systemAuditList.add(new SystemAudit(7, "A2", "B3", "C1"));
systemAuditList.add(new SystemAudit(8, "A2", "B3", "C1"));

التحليل واستخراج قائمة جديدة

الخطوة التالية تتطلب منّا تصفية هذه القائمة بحيث يتم الاحتفاظ بالخصائص التي تختلف فقط عن السجل السابق. سنستعرض كيفية القيام بذلك باستخدام Java Stream. الكود المستخدم في هذه العملية هو:

var systemAuditListCorrectlyFiltered = systemAuditList.stream()
    .collect(Collectors.collectingAndThen(
        Collectors.toCollection(() -> new TreeSet<>(Comparator
            .comparing(SystemAudit::getDescriptionFieldA)
            .thenComparing(SystemAudit::getDescriptionFieldB)
            .thenComparing(SystemAudit::getDescriptionFieldC))),
        ArrayList::new))
    .stream()
    .map(SystemAuditHelper::create)
    .sorted(Comparator.comparing(SystemAuditHelper::getId, Comparator.nullsLast(Comparator.reverseOrder())))
    .collect(Collectors.toList());

لكن النتائج التي نحصل عليها تختلف عن النتائج المتوقعة. نحتاج إلى تحقيق أن الخصائص المتكررة، مقارنة بالعنصر السابق، يتم تعيينها إلى null.

الحل البرمجي للحصول على النتائج المتوقعة

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

[{7, null, B3,   C1  },
 {6, A2,   null, null},
 {4, null, B2,   null},
 {3, A1,   null, null},
 {1, null, B1,   null},
 {0, A0,   B0,   C0  }]

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

الخلاصة

بفضل Java Stream، يمكننا معالجة البيانات بطرق متعددة، مما يجعلها أداة قوية في معالجة قائمة الكائنات. من خلال استخدام تدفقات البيانات، يمكننا إنشاء قائمة جديدة بالكائنات مع تعيين الخصائص التي تتطابق مع الكائن السابق إلى null، مما يساعد في القضاء على التكرار في البيانات. هذه التقنية ستساعد المطورين بشكل كبير في تحسين الأداء والفعالية في البرمجة.

بهذا نكون قد تناولنا كيفية استخدام Java Stream لإنشاء قائمة جديدة من الكائنات مع تعيين الخصائص الفارغة عند التشابه، مما يساهم في تحسين إدارة البيانات في التطبيقات البرمجية.

فهد السلال

خبير تقني متخصص في شروحات الكمبيوتر والإنترنت والموبايل، يتمتع بخبرة واسعة في تقديم حلول تقنية مبتكرة ومبسطة. يهدف فهد إلى مساعدة المستخدمين على تحسين تجربتهم التقنية من خلال مقالات وأدلة عملية واضحة وسهلة الفهم.
زر الذهاب إلى الأعلى
Don`t copy text!