لامداس
إذا كنت لا تعرف ما هي لامدا على الإطلاق، إذن: تبدو لامدا كما يلي:(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
;- وكل شيء آخر يتبادر إلى ذهنك.
- فقط لامدا، المهمة عليهم.
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 - يمكنك الحصول على سطر يحتوي على كلمات في دفق واحد ثم كتابته في ملف (لا أعرف ما إذا كان من الممكن الكتابة إلى ملف من دفق)
GO TO FULL VERSION