يمكن أن يؤدي التخزين المؤقت للكيانات في الخريطة إلى تحسين الأداء عن طريق تقليل الحاجة إلى جلب البيانات بشكل متكرر من قاعدة البيانات أو مصادر البيانات الأخرى. باستخدام Java Streams، يمكنك بسهولة إنشاء مثل هذه ذاكرة التخزين المؤقت.
مثال على الكود
import java.util.List; import java.util.Map; import java.util.stream.Collectors; class User { private int id; private String name; // Constructors, getters, setters } public class EntityCacheExample { public static void main(String[] args) { Listusers = List.of( new User(1, "Alice"), new User(2, "Bob"), new User(3, "Charlie") ); Map userCache = users.stream() .collect(Collectors.toMap(User::getId, user -> user)); System.out.println(userCache); } }
في الكود أعلاه، نستخدم Collectors.toMap() لتحويل قائمة كائنات المستخدم إلى خريطة حيث المفتاح هو معرف المستخدم والقيمة هي كائن المستخدم نفسه. يؤدي هذا بشكل فعال إلى إنشاء ذاكرة تخزين مؤقت لكيانات المستخدم.
نتيجة العرض التوضيحي
{1=User{id=1, name='Alice'}, 2=User{id=2, name='Bob'}, 3=User{id=3, name='Charlie'}}
يمكن أن تكون الخرائط المتداخلة مفيدة عندما تحتاج إلى تصنيف البيانات إلى مستويات متعددة. على سبيل المثال، قد ترغب في تجميع المستخدمين حسب قسمهم ثم حسب دورهم.
مثال على الكود
import java.util.List; import java.util.Map; import java.util.stream.Collectors; class User { private String department; private String role; private String name; // Constructors, getters, setters } public class NestedMapExample { public static void main(String[] args) { Listusers = List.of( new User("HR", "Manager", "Alice"), new User("IT", "Developer", "Bob"), new User("IT", "Manager", "Charlie") ); Map >> nestedMap = users.stream() .collect(Collectors.groupingBy(User::getDepartment, Collectors.groupingBy(User::getRole))); System.out.println(nestedMap); } }
يوضح هذا الرمز كيفية استخدام Collectors.groupingBy() لإنشاء خريطة. تقوم الخريطة بتجميع المستخدمين حسب القسم، بينما تقوم الخريطة الداخلية بتجميعهم حسب الدور.
نتيجة العرض التوضيحي
{HR={Manager=[User{name='Alice'}]}, IT={Developer=[User{name='Bob'}], Manager=[User{name='Charlie'}]}}
في بعض الأحيان، قد ترغب في تخزين سمات متعددة لمفتاح واحد في الخريطة. استخدام خريطة
>
يمكن أن يكون حلاً فعالاً.
مثال على الكود
import java.util.List; import java.util.Map; import java.util.AbstractMap.SimpleEntry; import java.util.stream.Collectors; class User { private int id; private String name; private int age; // Constructors, getters, setters } public class MapWithTwoValuesExample { public static void main(String[] args) { Listusers = List.of( new User(1, "Alice", 30), new User(2, "Bob", 25), new User(3, "Charlie", 35) ); Map > userMap = users.stream() .collect(Collectors.toMap(User::getId, user -> new SimpleEntry(user.getName(), user.getAge()))); System.out.println(userMap); } }
هنا، نستخدم SimpleEntry لإنشاء خريطة بقيمتين - الاسم والعمر - مرتبطة بكل معرف مستخدم.
نتيجة العرض التوضيحي
{1=Alice=30, 2=Bob=25, 3=Charlie=35}
يمكن أن يؤدي التجميع والتخطيط معًا إلى تبسيط عمليات تحويل البيانات المعقدة، مثل تحويل قائمة الكائنات إلى خريطة مجمعة حيث تحتوي كل مجموعة على سمات محددة.
مثال على الكود
import java.util.List; import java.util.Map; import java.util.stream.Collectors; class User { private String department; private String name; // Constructors, getters, setters } public class GroupingByMappingExample { public static void main(String[] args) { Listusers = List.of( new User("HR", "Alice"), new User("IT", "Bob"), new User("HR", "Charlie") ); Map > groupedMap = users.stream() .collect(Collectors.groupingBy(User::getDepartment, Collectors.mapping(User::getName, Collectors.toList()))); System.out.println(groupedMap); } }
في هذا المثال، نقوم بتجميع المستخدمين حسب القسم ثم نقوم بتعيين كائنات المستخدم على أسمائهم، مما يؤدي إلى إنشاء خريطة حيث يرتبط كل قسم بقائمة أسماء.
نتيجة العرض التوضيحي
{HR=[Alice, Charlie], IT=[Bob]}
يسمح لك الجمع بين التجميع والتخطيط والتقليل بتجميع البيانات بكفاءة، مثل جمع القيم أو العثور على الحد الأقصى للقيمة في كل مجموعة.
مثال على الكود
import java.util.List; import java.util.Map; import java.util.stream.Collectors; class Transaction { private String type; private int amount; // Constructors, getters, setters } public class GroupingByMappingReducingExample { public static void main(String[] args) { Listtransactions = List.of( new Transaction("Deposit", 100), new Transaction("Deposit", 200), new Transaction("Withdrawal", 50), new Transaction("Withdrawal", 30) ); Map transactionSums = transactions.stream() .collect(Collectors.groupingBy(Transaction::getType, Collectors.reducing(0, Transaction::getAmount, Integer::sum))); System.out.println(transactionSums); } }
في هذا الكود، نقوم بتجميع المعاملات حسب النوع، وربطها بمبالغها، ثم تقليل المبالغ عن طريق جمعها. والنتيجة هي خريطة توضح المبلغ الإجمالي لكل نوع معاملة.
نتيجة العرض التوضيحي
{Deposit=300, Withdrawal=80}
يمكن لحيل Java Stream المتقدمة هذه أن تعزز بشكل كبير كفاءة الترميز وسهولة القراءة. ومن خلال إتقان هذه التقنيات، يمكنك التعامل مع مهام معالجة البيانات المعقدة بسهولة. إذا كان لديك أي أسئلة أو كنت بحاجة إلى مزيد من التوضيح، فلا تتردد في التعليق أدناه!
اقرأ المشاركات المزيد على : 5 حيل Java Stream المتقدمة التي تحتاج إلى معرفتها
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3