JavaRush /مدونة جافا /Random-AR /لامبدا والجداول، الممارسة فقط، لا نظرية

لامبدا والجداول، الممارسة فقط، لا نظرية

نشرت في المجموعة
أهلاً بكم. بمناسبة المسابقة قررت ألا أكتب هنا مقالاً بل درساً قصيراً. سيكون حول لامدا والجداول في جافا. إذا كنت على دراية بها بالفعل وتستخدمها، فانتقل مباشرة إلى نهاية المقالة، وستكون هناك مجموعة صغيرة من المهام باستخدام JavaRush والتي يمكنك التدرب عليها. أنت بحاجة إلى Java 8 والإصدارات الأحدث، والتدريب من JR، وسيكون هناك القليل من التفاصيل والكثير من الأشياء غير المفهومة، ورغبة قوية في فهم ذلك. لنبدأ بحقيقة أنني لن أشرح تاريخ ظهور Lambdas والجداول، وأنا لا أعرف ذلك بنفسي. كل ما أعرفه هو أنها جاءت من أسلوب البرمجة الوظيفية إلى أسلوب OOP الخاص بنا. في تجربتي التعليمية القصيرة، أوضحت ببساطة كيف وماذا، يجد بعض الأشخاص صعوبة في فهم الفكرة، لذلك فقط تذكر كيف تكتب، ستفهم لاحقًا.

لامداس

لامبدا وتيارات، الممارسة فقط، لا نظرية - 1لامبدا والجداول، الممارسة فقط، لا نظرية - 2إذا كنت لا تعرف ما هي لامدا على الإطلاق، إذن: تبدو لامدا كما يلي:
(a, b) -> a.compareTo(b)
(переменные) -> действие
هذا يكفي الآن. يمكنك قراءة النظرية هنا: الرابط الأول ، الرابط الثاني ، لكنني أعتقد أن الممارسة أكثر متعة. أقترح عليك حل المشكلة التالية: اكتب آلة حاسبة باستخدام الطريقة الأولى. يجب أن تقبل الطريقة قيمتين رقميتين وشيء آخر. سيبدو الكود الخاص بك كما يلي:
class Lambda{
    public static void main (String[] args) {
	}

    public static double calculate(){
       	return null;
    }
}
تحتاج إلى إدخال 3 معلمات في توقيع الطريقة calculate، وإضافة أمر واحد returnواختبار استدعاء هذه الطريقة main. ما الذي يجب أن تكون هذه الطريقة قادرة على فعله؟
  • يطوى؛
  • تتضاعف؛
  • يقسم؛
  • طرح او خصم؛
  • حساب الجذر
  • ارفع إلى قوة؛
  • رفع مجموع الوسائط مقسومًا على الرقم الأول + 117 إلى قوة ما؛
  • وجميع العمليات الأخرى التي يمكنك التفكير فيها.
ما لا يجب استخدامه:
  • if-else;
  • charكمؤشر العملية.
  • switch-case;
  • وكل شيء آخر يتبادر إلى ذهنك.
ما يمكنك استخدامه:
  • فقط لامدا، المهمة عليهم.
- ماذا؟ وهذا كل شيء؟ - نعم هذا كل شيء، لأنك حرفيًا تحتاج إلى إضافة 3 أسطر، إذا اقترحت واحدًا على الأقل، سيتم كتابة الباقي تلقائيًا. وإذا أردت، يمكنك البحث في جوجل عن الأمثلة ومحاولة الفهم. بالطبع ستراجع نفسك وإذا غشيت فلن يعرف أحد، لكن لماذا إذن؟ بعد حل هذه المشكلة البسيطة، اكتسب جميع طلابي البالغ عددهم 1.5 فهمًا تقريبيًا لماهية لامدا وكيفية استخدامها. سيكون هذا ضروريًا جدًا للبث. إذا كنت تريد التباهي بالنتيجة ومعرفة ما إذا كنت قد فعلت ذلك بشكل صحيح، أرسل الرمز في رسالة خاصة. ليست هناك حاجة للتعليق؛ يمكنك إضافة نصائح مثيرة للاهتمام هناك (ولكن بطريقة لا تجعل المهمة سهلة للغاية). مرة أخرى، بعد حل هذا المثال، يجب أن يكون لديك بالفعل فهم تقريبي لكيفية استخدام لامدا.
لامبدا وتيارات، الممارسة فقط، لا نظرية - 3
الآن دعنا ننتقل إلى تدفقات جافا. هذه ليست التدفقات التي ربما فكرت فيها أنت، أيها القارئ. لا ليس كذلك inputStreamوليس كذلك OutputStream. إنه مختلف، إنه أكثر إثارة للاهتمام. لقد حلت التدفقات محل الدورات، ليس بشكل كامل، ولكن لا يزال. يتم تقديمهم تحت شعار "لا تشرح كيفية القيام بذلك، اشرح ما يجب القيام به". مثال صغير على الدفق:
List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");

myList.stream()
    .filter(s -> s.startsWith("c"))
    .map(String::toUpperCase)
    .sorted()
    .forEach(System.out::println);
ما الذي يحدث هنا؟ دعونا نضيف التعليقات:
myList.stream() // получить поток
    .filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
    .map(String::toUpperCase)  // преобразовать все значения, перевести в верхний регистр
    .sorted() // отсортировать по порядку (дефолтный порядо)
    .forEach(System.out::println); // вывести каждый элемент на экран
قارن مع حلقة عادية:
List<String> toSort = new ArrayList<>();
for(String s : myList){
     if(s.startsWith("c")){
         toSort.add(s.toUpperCase());
     }
}

Collections.sort(toSort);

for(String s : toSort){
     System.ouy.println(s);
}
عندما تقرأ الكود، يبدو كل شيء مخيفًا، لكن هل الأمر أسهل مع التعليقات؟ وهذا أمر طبيعي، ولم أفهمهم لفترة طويلة أيضًا. مفتاح الفهم هو الممارسة. لذلك، نبدأ في قراءة مقالات الطرف الثالث والبحث عن إجابات لأسئلتنا، يمكنك أيضًا طرحها هنا في التعليقات، لن أعطي إجابة كاملة، لكنني سأشير إلى الاتجاه. قائمة المهام من JavaRush التي أعتقد أنها رائعة لممارسة البث:
  • 2208 - يمكن حلها بتدفق واحد وعودة واحدة، أي. سيبدأ نص الطريقة returnوبعد ذلك سيكون هناك تيار واحد كامل. دعونا نغفل هذا الشرط StringBuilder.

  • 1908 - يمكنك أيضًا حلها ببث واحد وعودة واحدة. البدء بقراءة الملف. لا أعرف كيفية التسجيل إلى ملف عبر التدفقات (إذا كان ذلك ممكنًا)، في الوقت الحالي نقوم بذلك يدويًا. أولئك. نفتح دفقين فقط (وحدة التحكم والكتابة إلى ملف). نقرأ الملف من خلال الطرق التي ستعيد لنا إما ورقة أو دفقًا (google وjavadoc).

  • 1907 - من الناحية النظرية، يمكن حلها أيضًا في تيار واحد. الإدخال في الدفق هو اسم الملف، والإخراج هو عدد الكلمات في العالم.

هذا كل شئ. إذا استطعت، سأكتب قصة بسيطة أخرى. في رأيي، القراءة عن شيء رائع دون أن تتاح لك الفرصة لتجربته أمر ممل إلى حد ما أو شيء من هذا القبيل. وبعد الآلة الحاسبة والألغاز الثلاثة، أعتقد أنك تتفق جيدًا مع لامدا والجداول، لذا اقرأ عن كل الاحتمالات إذا لم تكن قد قرأتها بالفعل. محدث:
  • 1016 - بطريقة منحرفة قليلاً، يمكنك حلها في دفق واحد وعودة واحدة؛

  • 1821 - سهل جدًا وفي بث واحد وعودة واحدة.

    ستعرّفك هاتان المهمتان على طريقة بث أخرى وأداة تجميع أخرى.

  • 1925 - يمكنك الحصول على سطر يحتوي على كلمات في دفق واحد ثم كتابته في ملف (لا أعرف ما إذا كان من الممكن الكتابة إلى ملف من دفق)

تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION