מדריך לאוסף אוספי Apache Commons CollectionUtils

מאמר זה הוא חלק מסדרה: • תיק אוספים של Apache Commons

• אוספי Apache Commons SetUtils

• אוספי Apache Commons OrderedMap

• אוספי Apache Commons BidiMap

• מדריך לאוספי אוספים של Apache Commons CollectionUtils (המאמר הנוכחי) • Apache Commons Collections אוספים MapUtils

• מדריך ל- Apache Commons CircularFifoQueue

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

במילים פשוטות, ה אפאצ'יאוסף כלי עזר מספק שיטות שימוש לפעולות נפוצות המכסות מגוון רחב של מקרי שימוש ועוזרת במניעת כתיבת קוד הדוד. הספרייה מכוונת למהדורות JVM ישנות יותר משום שכיום פונקציונליות דומה מסופקת על ידי Java 8 זרם ממשק API.

2. תלות Maven

עלינו להוסיף את התלות הבאה כדי להתחיל איתה אוסף כלים:

 org.apache.commons commons-collection4 4.1 

הגרסה האחרונה של הספרייה נמצאת כאן.

3. התקנה

בואו נוסיף צרכן ו שיעורי כתובת:

לקוח ממעמד ציבורי {מזהה שלם פרטי; שם מחרוזת פרטי; כתובת כתובת פרטית; // getters and setters} מחלקה ציבורית כתובת {יישוב מחרוזת פרטי; עיר מיתרים פרטית; // סטרים וקובעים סטנדרטיים}

אנו נשמור גם על הדברים הבאים צרכן ו רשימה מקרים מוכנים לבדוק את היישום שלנו:

לקוח לקוח 1 = לקוח חדש (1, "דניאל", "יישוב 1", "עיר 1"); לקוח לקוח 2 = לקוח חדש (2, "פרדריק", "יישוב 2", "עיר 2"); לקוח לקוח 3 = לקוח חדש (3, "קייל", "יישוב 3", "עיר 3"); לקוח לקוח 4 = לקוח חדש (4, "בוב", "יישוב 4", "עיר 4"); לקוח לקוח 5 = לקוח חדש (5, "חתול", "יישוב 5", "עיר 5"); לקוח לקוח 6 = לקוח חדש (6, "ג'ון", "מקום 6", "עיר 6"); רשימת רשימה 1 = Arrays.asList (לקוח 1, לקוח 2, לקוח 3); רשימת רשימה 2 = Arrays.asList (לקוח 4, לקוח 5, לקוח 6); רשימת רשימה 3 = Arrays.asList (לקוח 1, לקוח 2); רשימה linkedList1 = חדש LinkedList (רשימה 1);

4. אוסף כלי עזר

בוא נעבור על כמה מהשיטות הנפוצות ביותר ב- אוסף Apache CommonsUtils מעמד.

4.1. הוספת אלמנטים שאינם אפסיים בלבד

אנחנו יכולים להשתמש אוסף של Utils AddIgnoreNull שיטה להוסיף רק אלמנטים שאינם null לאוסף שסופק.

הטיעון הראשון לשיטה זו הוא האוסף שאליו אנו רוצים להוסיף את האלמנט והארגומנט השני הוא האלמנט אותו אנו רוצים להוסיף:

@ Test public void givenList_whenAddIgnoreNull_thenNoNullAdded () {CollectionUtils.addIgnoreNull (list1, null); assertFalse (list1.contains (null)); }

שימו לב שה- ריק לא התווסף לרשימה.

4.2. רשימות אוסף

אנחנו יכולים להשתמש לְהַשְׁווֹת שיטה לאיסוף שתי רשימות שכבר מסודרות. שיטה זו לוקחת את שתי הרשימות שאנו רוצים למזג כארגומנטים ומחזירה רשימה ממוינת אחת:

@Test ציבורי בטל givenTwoSortedLists_whenCollated_thenSorted () {List sortedList = CollectionUtils.collate (list1, list2); assertEquals (6, sortedList.size ()); assertTrue (sortedList.get (0) .getName (). שווה ("בוב")); assertTrue (sortedList.get (2) .getName (). שווה ("דניאל")); }

4.3. חפצים משנים

אנחנו יכולים להשתמש ב- שינוי צורה שיטה להפוך אובייקטים ממחלקה A לאובייקטים שונים ממעמד B. שיטה זו לוקחת רשימה של אובייקטים ממחלקה A ו- a שַׁנַאי כטיעונים.

התוצאה של פעולה זו היא רשימה של אובייקטים ממחלקה B:

@Test הציבור בטל givenListOfCustomers_whenTransformed_thenListOfAddress () {אוסף addressCol = CollectionUtils.collect (רשימה 1, שנאי חדש () {צורת כתובת ציבורית (לקוח לקוח) {return customer.getAddress ();}}); רשימת addressList = ArrayList חדש (addressCol); assertTrue (addressList.size () == 3); assertTrue (addressList.get (0) .getLocality (). שווה ("Local1")); }

4.4. סינון אובייקטים

באמצעות לְסַנֵן אנו יכולים להסיר מרשימה אובייקטים שאינם מספקים תנאי נתון.השיטה לוקחת את הרשימה כטיעון הראשון ו- לְבַסֵס כטיעון השני שלה.

ה filterInverse השיטה עושה את ההפך. זה מסיר אובייקטים מהרשימה כאשר לְבַסֵס מחזיר נכון.

שניהם לְסַנֵן ו filterInverse לַחֲזוֹר נָכוֹן אם רשימת הקלט שונתה, כלומר אם לפחות אובייקט אחד סונן מהרשימה:

@Test ציבורי בטל givenCustomerList_WhenFiltered_thenCorrectSize () {בוליאני isModified = CollectionUtils.filter (linkedList1, Predicate חדש) ({בוליאני ציבורי להעריך (לקוח לקוח) {return Arrays.asList ("דניאל", "Kyle"). מכיל (customer.getName ( ));}}); assertTrue (linkedList1.size () == 2); }

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

4.5. בודק אם אין ריק

ה- IsNotEmpty השיטה שימושית למדי כאשר אנו רוצים לבדוק אם יש לפחות אלמנט יחיד ברשימה. הדרך האחרת לבדוק אותה היא:

בוליאני isNotEmpty = (רשימה! = null && list.size ()> 0);

למרות ששורת הקוד שלעיל עושה את אותו הדבר, CollectionUtils.isNotEmpty שומר על הקוד שלנו נקי יותר:

@Test הציבור בטל givenNonEmptyList_whenCheckedIsNotEmpty_thenTrue () {assertTrue (CollectionUtils.isNotEmpty (list1)); }

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

רשימה emptyList = ArrayList חדש (); רשימת nullList = null; assertTrue (CollectionUtils.isEmpty (nullList)); assertTrue (CollectionUtils.isEmpty (ריק רשימה));

4.6. בודק הכללה

אנחנו יכולים להשתמש isSubCollection כדי לבדוק אם אוסף נכלל באוסף אחר. isSubCollection לוקח שני אוספים כטיעונים ומחזיר נָכוֹן אם האוסף הראשון הוא אוסף משנה של האוסף השני:

@Test הציבור בטל givenCustomerListAndASubcollection_whenChecked_thenTrue () {assertTrue (CollectionUtils.isSubCollection (list3, list1)); }

אוסף הוא אוסף משנה של אוסף אחר אם מספר הפעמים שאובייקט מתרחש באוסף הראשון קטן או שווה למספר הפעמים שהוא מתרחש באוסף השני.

4.7. צומת אוספים

אנחנו יכולים להשתמש CollectionUtils.intersection שיטה להגיע לצומת של שני אוספים. שיטה זו לוקחת שני אוספים ומחזירה אוסף של אלמנטים אשר נפוצים בשני אוספי הקלט:

@ מבט בטל ציבורי givenTwoLists_whenIntersected_thenCheckSize () {צומת אוסף = CollectionUtils.intersection (רשימה 1, רשימה 3); assertTrue (intersection.size () == 2); }

מספר הפעמים שאלמנט מתרחש באוסף שהתקבל הוא מינימום ממספר הפעמים שהוא מתרחש בכל אחת מהאוספים הנתונים.

4.8. הפחתת אוספים

CollectionUtils.subtract לוקח שני אוספים כקלט ומחזיר אוסף המכיל אלמנטים שנמצאים באוסף הראשון אך לא באוסף השני:

@Test הציבור בטל givenTwoLists_whenSubtracted_thenCheckElementNotPresentInA () {אוסף תוצאה = CollectionUtils.subtract (רשימה 1, רשימה 3); assertFalse (result.contains (customer1)); }

מספר הפעמים שאוסף מתרחש בתוצאה הוא מספר הפעמים שהוא מתרחש באוסף הראשון פחות מספר הפעמים שהוא מתרחש באוסף השני.

4.9. איחוד האוספים

CollectionUtils.union עושה איחוד של שני אוספים ומחזיר אוסף המכיל את כל האלמנטים שנמצאים באוסף הראשון או השני.

@Test הציבור בטל givenTwoLists_whenUnioned_thenCheckElementPresentInResult () {איחוד אוסף = CollectionUtils.union (רשימה1, רשימה2); assertTrue (union.contains (customer1)); assertTrue (union.contains (customer4)); }

מספר הפעמים שאלמנט מתרחש באוסף המתקבל הוא המקסימום של מספר הפעמים שהוא מתרחש בכל אחת מהאוספים הנתונים.

5. מסקנה

וסיימנו.

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

כרגיל, הקוד זמין ב- GitHub.

הַבָּא » Apache Commons אוספים MapUtils « אוספי Apache Commons קודמים BidiMap

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