JavaRush /בלוג Java /Random-HE /למדות וזרמים, רק תרגול, בלי תיאוריה

למדות וזרמים, רק תרגול, בלי תיאוריה

פורסם בקבוצה
שלום לכולם. לרגל התחרות החלטתי לכתוב כאן לא מאמר אלא שיעור קצר. זה יעסוק בלמבדות וזרמים בג'אווה. אם אתם כבר מכירים ומשתמשים בהם, אז דלגו ישר לסוף המאמר, יהיה מבחר קטן של משימות עם JavaRush עליהן תוכלו להתאמן. אתה צריך java 8 ומעלה, אימון מ-JR, יהיו מעט פרטים והרבה דברים לא מובנים, רצון עז להבין את זה. נתחיל מזה שלא אסביר את ההיסטוריה של הופעת הלמבדות והנחלים, אני פשוט לא יודע זאת בעצמי. אני רק יודע שהם הגיעו מסגנון התכנות הפונקציונלי, לסגנון OOP שלנו. בחוויית הלמידה הקצרה שלי, פשוט הראיתי איך ומה, יש אנשים שמתקשים להבין את הרעיון, אז רק תזכרו איך כותבים, תבינו אחר כך.

למדות

למדות וזרמים, רק תרגול, בלי תיאוריה - 1למדות וזרמים, רק תרגול, אין תיאוריה - 2אם אתה לא יודע מהן למבדות בכלל, אז: למבדה נראית כך:
(a, b) -> a.compareTo(b)
(переменные) -> действие
זה מספיק לעת עתה. אתה יכול לקרוא את התיאוריה כאן: קישור אחד , קישור שני , אבל אני חושב שהתרגול הרבה יותר כיף. אני מציע לך לפתור את הבעיה הבאה: כתוב מחשבון בשיטה 1. השיטה צריכה לקבל 2 ערכים דיגיטליים ומשהו אחר. הקוד שלך ייראה בערך כך:
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 - ניתן לפתור עם 1 זרם ו-1 החזרה, כלומר. גוף השיטה יתחיל עם returnואז יהיה זרם שלם אחד. בוא נשמיט את הדרישה StringBuilder.

  • 1908 - אתה יכול גם לפתור את זה עם זרם אחד ו-1 חזרה. מתחילים בקריאת הקובץ. אני לא יודע איך להקליט לקובץ דרך זרמים (אם זה אפשרי), בזמן שאנחנו עושים את זה ידנית. הָהֵן. אנחנו פותחים רק 2 זרמים (קונסול וכתיבה לקובץ). אנו קוראים את הקובץ באמצעות שיטות שיחזירו לנו גיליון או זרם (גוגל ו-javadoc).

  • 1907 - בתיאוריה אפשר לפתור את זה גם בזרם אחד. הקלט לזרם הוא שם הקובץ, הפלט הוא מספר המילים בעולם.

זה הכל. אם אוכל, אכתוב עוד סיפור פשוט. לדעתי, לקרוא על משהו מגניב בלי הזדמנות לנסות זה איכשהו משעמם או משהו. ואחרי המחשבון ו-3 חידות, אני חושב שאתה כבר מסתדר טוב עם למבדות וזרמים, אז קרא על כל האפשרויות אם עדיין לא הצלחת. UPD:
  • 1016 - בצורה מעט מעוותת, אתה יכול לפתור את זה בזרם אחד ובחזרה אחת;

  • 1821 - קל מאוד ובזרם אחד וחזרה אחת.

    2 המשימות הללו יציגו אתכם לשיטת סטרימינג נוספת ועוד אספן.

  • 1925 - אתה יכול לקבל שורה עם מילים בזרם אחד ואז לכתוב אותה לקובץ (אני לא יודע אם אפשר לכתוב לקובץ מזרם)

הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION