פעולות מחרוזת עם זרמי ג'אווה

1. סקירה כללית

Java 8 הציגה חדש זרם ממשק API המאפשר לנו לעבד נתונים בצורה הצהרתית.

במאמר מהיר זה נלמד כיצד להשתמש ב- זרם ממשק API לפיצול מופרד בפסיקים חוּט לרשימה של מיתרים ואיך להצטרף ל- חוּט מערך לתוך מופרד באמצעות פסיק חוּט.

נבדוק גם כיצד להמיר מערך מחרוזות למפה באמצעות זרם ממשק API.

כמעט כל הזמן אנו מתמודדים עם סיטואציות, בהן אנו צריכים לאמץ כמה אוספי ג'אווה ולסנן את אוסף מבוסס על הגיון סינון כלשהו. בגישה מסורתית לסוג כזה של סיטואציות, נשתמש בהמון לולאות ופעולות אם-אחרת כדי להשיג את התוצאה הרצויה.

אם אתה רוצה לקרוא עוד על זרם API, עיין במאמר זה.

2. הצטרפות למיתרים עם זרם ממשק API

בואו נשתמש ב- זרם API ליצירת פונקציה שתצטרף ל- חוּט מערך לתוך מופרד באמצעות פסיק חוּט:

מחרוזת סטטית ציבורית מצטרפת (String [] arrayOfString) {return Arrays.asList (arrayOfString) .stream () //. map (...) .collect (Collectors.joining (",")); }

נקודות שיש לציין כאן:

  • ה זרם() פונקציה ממירה כל אחד אוסף לזרם נתונים
  • מַפָּה() פונקציה משמשת לעיבוד הנתונים
  • יש גם פונקציה אחרת בשם לְסַנֵן(), שם נוכל לכלול קריטריונים לסינון

יכולים להיות תרחישים, בהם נרצה להצטרף ל- חוּט עם קידומת ותיקון קבועים כלשהם. עם ה זרם API אנו יכולים לעשות זאת באופן הבא:

מחרוזת סטטית ציבורית joinWithPrefixPostfix (String [] arrayOfString) {return Arrays.asList (arrayOfString) .stream () //. map (...) .collect (Collectors.joining (",", "[", "]") ); }

כפי שאנו יכולים לראות ב Collectors.joining () שיטה, אנו מכריזים על הקידומת שלנו כ- ‘[‘ ותיקון פוסט כ ‘]'; ומכאן שנוצר חוּט ייווצר עם מוכרז […..] פוּרמָט.

3. פיצול מיתרים עם זרם ממשק API

עכשיו, בואו ניצור פונקציה שתפצל פסיק מופרד חוּט לרשימה של חוּט באמצעות זרם ממשק API:

פיצול רשימה סטטית ציבורית (String str) {return Stream.of (str.split (",")) .map (elem -> String new (elem)) .collect (Collectors.toList ()); }

אפשר גם להמיר ישירות a חוּט אל א אופי רשימה באמצעות זרם ממשק API:

רשימה סטטית ציבורית splitToListOfChar (String str) {return str.chars () .mapToObj (item -> (char) item) .collect (Collectors.toList ()); }

עובדה מעניינת אחת שיש לציין כאן היא שה- תווים () שיטה ממירה את חוּט לזרם של מספר שלם שם כל אחד מספר שלם ערך מציין את ASCII ערך של כל אחד ואחד לְהַשְׁחִיר סדר פעולות. לכן עלינו להקליד במפורש את אובייקט המפה ב- mapToObj () שיטה.

4. חוּט מערך ל מַפָּה עם זרם ממשק API

אנחנו יכולים גם להמיר א חוּט מערך למפה באמצעות לְפַצֵל ו Collectors.toMap, בתנאי שכל פריט במערך מכיל ישות עם ערך מפתח המורכבת על ידי מפריד:

מערך מפות סטטי ציבורי arrayToMap (String [] arrayOfString) {return Arrays.asList (arrayOfString) .stream () .map (str -> str.split (":")) .collect (toMap (str -> str [0], str -> str [1])); }

פה, “:” הוא המפריד בין ערכי המפתח עבור כל האלמנטים במערך מחרוזות.

אנא זכור שכדי להימנע משגיאת אוסף, עלינו לוודא כי קוד נערך באמצעות Java 1.8. לשם כך עלינו להוסיף את התוסף הבא ב- pom.xml:

   org.apache.maven.plugins maven-compiler-plugin 3.3 1.8 1.8 

5. בדיקות

מכיוון שסיימנו ליצור את הפונקציות, בואו ניצור מקרי בדיקה כדי לאמת את התוצאה.

ראשית, בואו לבדוק את שיטת ההצטרפות הפשוטה שלנו:

@Test הציבור בטל givenArray_transformedToStream_convertToString () {String [] programmingLanguages ​​= {"java", "python", "nodejs", "ruby"}; ציפיית מחרוזת = "java, python, nodejs, ruby"; תוצאת מחרוזת = JoinerSplitter.join (programmeringLanguages); assertEquals (תוצאה, ציפייה); }

לאחר מכן, בואו ניצור עוד אחד לבדיקת פונקציונליות הפיצול הפשוטה שלנו:

@Test ציבורי בטל givenString_transformedToStream_convertToList () {String programmingLanguages ​​= "java, python, nodejs, ruby"; ציפייה לרשימה = ArrayList חדש (); expectation.add ("ג'אווה"); expectation.add ("פיתון"); expectation.add ("nodejs"); ציפייה. להוסיף ("אודם"); תוצאת רשימה = JoinerSplitter.split (programmeringLanguages); assertEquals (תוצאה, ציפייה); }

לבסוף, בואו לבדוק את שלנו חוּט פונקציונליות מערך למפה:

@Test הציבור בטל givenStringArray_transformedToStream_convertToMap () {String [] programming_languages ​​= מחרוזת חדשה [] {"שפה: java", "os: linux", "עורך: emacs"}; ציפיית מפה = HashMap חדש (); expectation.put ("שפה", "java"); expectation.put ("os", "linux"); expectation.put ("עורך", "emacs"); תוצאת מפה = JoinerSplitter.arrayToMap (תכנות_שפות); assertEquals (תוצאה, ציפייה); }

באותו אופן, עלינו ליצור את שאר מקרי המבחן.

6. מסקנה

זרם API מספק לנו טכניקות מתוחכמות לעיבוד נתונים. דרך חדשה זו של כתיבת קוד יעילה מאוד מבחינת ניהול זיכרון ערימה בסביבה מרובת שרשראות.

כמו תמיד, קוד המקור המלא זמין ב- Github.


$config[zx-auto] not found$config[zx-overlay] not found