JavaRush /مدونة جافا /Random-AR /توقف عن كتابة الدورات! أفضل 10 طرق للعمل مع المجموعات من ...

توقف عن كتابة الدورات! أفضل 10 طرق للعمل مع المجموعات من Java 8

نشرت في المجموعة
أعتقد أنه ليست هناك حاجة لشرح لطلاب JavaRush ما هي المجموعات وما الغرض منها. ومع ذلك، بعد إصدار الإصدار الثامن، تم تبسيط العديد من العمليات الأولية، التي استغرقت في السابق 6-7 أسطر من التعليمات البرمجية، إلى الحد الأدنى. دون مزيد من اللغط، إليك أفضل 10 تقنيات لإطار عمل مجموعات Java8 والتي ستوفر لك الكثير من الوقت والمساحة! توقف عن كتابة الدورات!  أفضل 10 طرق للعمل مع المجموعات من Java 8 - 1مرحبا بالجميع أيها الأصدقاء! العادة، كما تعلم، هي طبيعة ثانية. وبعد أن اعتدت على الكتابة، for (int i = 0; i <......)لا أريد أن أتعلمها مرة أخرى على الإطلاق (خاصة وأن هذا التصميم بسيط للغاية ومفهوم). ومع ذلك، داخل الحلقات غالبًا ما نكرر نفس العمليات الأولية، والتي نود حقًا التخلص من تكرارها. مع إصدار Java8، قررت Oracle مساعدتنا في هذا الأمر. فيما يلي أفضل 10 طرق للتجميع ستوفر لك الكثير من الوقت والأكواد.

1. Iterable.forEach (إجراء المستهلك <؟ super T>)

الاسم يتحدث عن نفسه. يتكرر خلال المجموعة التي تم تمريرها وينفذ تعبير لامدا actionلكل عنصر.
List <Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
numbers.forEach(s -> System.out.print(s + " "));
1 2 3 4 5 6 7

2. Collection.removeIf (مرشح المسند<؟ super E>)

لا شيء معقد أيضًا. تتكرر الطريقة خلال المجموعة وتزيل العناصر المطابقة filter.
List <Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
numbers.removeIf(s -> s > 5);
 numbers.forEach(s -> System.out.print(s + " "));
في سطر واحد نزيل من القائمة جميع الأرقام الأكبر من 5.

3. Map.forEach(إجراء BiConsumer<? super K, ? super V>)

لا تعمل هذه الطريقة forEachمع الفئات التي تقوم بتنفيذ الواجهة فحسب Collection، بل تعمل أيضًا مع Map.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин

4. Map.compute(مفتاح K,BiFunction<? super K, ? super V, ? يمتد V> remappingFunction)

يبدو الأمر أكثر تخويفًا بعض الشيء، لكنه في الواقع بسيط، مثل كل ما سبق. بالنسبة للمفتاح المحدد key، تقوم هذه الطريقة بتعيين القيمة لنتيجة الوظيفة remappingFunction. على سبيل المثال:
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));

books.compute("Философия Java", (a,b) -> b+", крутой чувак");
System.out.println("_______________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
_______________________
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель, крутой чувак
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
مؤلف كتاب " فلسفة جافا " رائع بالتأكيد! :)

5. Map.computeIfAbsent(مفتاح K، الوظيفة<؟ super K،؟ يمتد V> mappingFunction)

ستضيف الطريقة عنصرًا جديدًا إلى الخريطة ، ولكن فقط في حالة عدم وجود العنصر الذي يحمل نفس المفتاح. سيتم تعيين نتيجة valueتنفيذ الوظيفة إليه mappingFunction. إذا كان العنصر الذي يحتوي على مثل هذا المفتاح موجودًا بالفعل، فلن تتم الكتابة فوقه، ولكنه سيبقى في مكانه. فلنعد إلى كتبنا ونجرب طريقة جديدة:
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.computeIfAbsent("Гарри Поттер и узник Азкабана", b -> getHarryPotterAuthor());
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
وظيفتنا mappingFunction:
public static String getHarryPotterAuthor() {
        return "Джоан Роулинг";
    }
و هنا الكتاب الجديد:
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Гарри Поттер и узник Азкабана. Author: Джоан Роулинг
Название книги: Властелин Колец. Author: Джон Толкин

6. Map.computeIfPresent(K key, BiFunction<? super K, ? super V, ? Extends V> remappingFunction)

نفس المبدأ، Map.compute()ولكن لن يتم تنفيذ جميع الحسابات إلا إذا كان العنصر الذي يحتوي على المفتاح keyموجودًا بالفعل.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.computeIfPresent("Евгений Онегин", (a,b) -> b="Александр Пушкин");
System.out.println("_________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
books.computeIfPresent("Братья Карамазовы", (a,b) -> b="Александр Пушкин");
System.out.println("_________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
عندما تم استدعاء الوظيفة لأول مرة، لم تحدث أي تغييرات، لأنه Mapلا يوجد كتاب بعنوان "Eugene Onegin" في كتابنا. لكن للمرة الثانية قام البرنامج بتغيير مؤلف كتاب «الإخوة كارامازوف» إلى «ألكسندر بوشكين». خاتمة:
_________________
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
_________________
Название книги: Братья Карамазовы. Author: Александр Пушкин
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин

7. Map.getOrDefault(مفتاح الكائن، V defaultValue)

إرجاع القيمة المقابلة للمفتاح key. إذا لم يكن هذا المفتاح موجودًا، فسيتم إرجاع القيمة الافتراضية.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

String igor = books.getOrDefault("Слово о полку Игореве", "Неизвестный автор");
System.out.println(igor);
بشكل مريح للغاية:
Неизвестный автор

8. Map.merge (مفتاح K، قيمة V، BiFunction<? super V, ? super V, ? يمتد V> remappingFunction)

لم أحاول حتى حساب عدد أسطر التعليمات البرمجية التي ستوفر لك هذه الطريقة.
  • Mapإذا كان المفتاح keyغير موجود في جهازك ، أو valueكان مساويا لهذا المفتاح ، nullتضيف الطريقة .Mapkey-value
  • إذا كان المفتاح Keyموجودًا وهو موجود، value != nullفإن الطريقة تغيره valueإلى نتيجة تنفيذ الوظيفة التي تم تمريرها remappingFunction.
  • إذا remappingFunctionعاد null، keyتتم إزالته من المجموعة.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.merge("Философия Java", "Брюс Эккель", (a, b) -> b +  " и кто-то там еще");
books.forEach((a,b) -> System.out.println("Название:" + a + ". Author: " + b));
خاتمة:
Название:Братья Карамазовы. Author: Федор Достоевский
Название:Философия Java. Author: Брюс Эккель и кто-то там еще
Название:Преступление и наказание. Author: Федор Достоевский
Название:Война и мир. Author: Лев Толстой
Название:Властелин Колец. Author: Джон Толкин
*آسف بروس*

9. Map.putIfAbsent(مفتاح K، قيمة V)

في السابق، لإضافة زوج إليه Mapإذا لم يكن موجودًا، كان عليك القيام بما يلي:
Map <String, String> map = new HashMap<>();
if (map.get("Властелин Колец") == null)
    map.put("Властелин Колец", "Джон Толкин");
الآن أصبح كل شيء أسهل بكثير:
Map<String, String> map = new HashMap<>();
map.putIfAbsent("Властелин Колец", "Джон Толкин");

10. Map.replace وMap.replaceAll()

الأخير في القائمة، ولكن ليس آخرا. Map.replace(K key, V newValue— يستبدل قيمة المفتاح keyبـ newValue، إذا كان هذا المفتاح موجودًا. إذا لم يكن الأمر كذلك، فلن يحدث شيء. Map.replace(K key, V oldValue, V newValue)- يفعل نفس الشيء، ولكن فقط إذا كانت القيمة الحالية keyهي oldValue. Map.replaceAll(BiFunction<? super K, ? super V, ? extends V> function)- يستبدل جميع القيم valueبنتيجة تنفيذ الوظيفة function. على سبيل المثال:
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.replace("Братья Карамазовы", "Брюс Эккель", "Джон Толкин");
books.forEach((a,b) -> System.out.println("Название:" + a + ". Author: " + b));
Название:Братья Карамазовы. Author: Федор Достоевский
Название:Философия Java. Author: Брюс Эккель
Название:Преступление и наказание. Author: Федор Достоевский
Название:Война и мир. Author: Лев Толстой
Название:Властелин Колец. Author: Джон Толкин
لم تعمل! القيمة الحالية لمفتاح الأخوة كارامازوف هي فيودور دوستويفسكي، وليس بروس إيكل، لذلك لم يتغير شيء.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.replaceAll((a,b) -> getCoolWriter());
books.forEach((a,b) -> System.out.println("Название:" + a + ". Author: " + b));
public static String getCoolWriter() {
        return "Крутой писатель";
    }
Название:Братья Карамазовы. Author: Крутой писатель
Название:Философия Java. Author: Крутой писатель
Название:Преступление и наказание. Author: Крутой писатель
Название:Война и мир. Author: Крутой писатель
Название:Властелин Колец. Author: Крутой писатель
يمكنك بسهولة تغيير قيم الخريطة بأكملها دون أي إنشاءات معقدة! ملحوظة: التعود على شيء جديد أمر صعب دائمًا، ولكن هذه التغييرات جيدة حقًا. على أية حال، أصبحت بعض أجزاء الكود الخاص بي الآن بالتأكيد أقل شبهاً بالسباغيتي من ذي قبل :) إذا أعجبك المقال وترغب في رؤية أجزاء جديدة، فلا تنس دعم المؤلف في المسابقة بالنقر فوق "أعجبني" أو والأفضل من ذلك، "أعجبني" :) حظا سعيدا في دراستك!
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION