הסרת כל האפסים מרשימה ב- Java
הדרכה מהירה זו הולכת להראות כיצד להסיר את כל ריק אלמנטים מ- רשימה, באמצעות Java רגיל, גויאבה, אוספי Apache Commons והתמיכה החדשה יותר ב- Java 8 lambda.
מאמר זה הוא חלק מה- "ג'אווה - חזרה לבסיסיסדרה כאן על באלדונג.
1. הסר אפסים מ- a רשימה שימוש ב- Java רגיל
מסגרת אוספי Java מציעה פיתרון פשוט עבור הסרת כל האלמנטים null רשימה - בסיסי בזמן לוּלָאָה:
@Test הציבור בטל givenListContainsNulls_whenRemovingNullsWithPlainJava_thenCorrect () {List list = Lists.newArrayList (null, 1, null); while (list.remove (null)); assertThat (רשימה, hasSize (1)); }
לחלופין, אנו יכולים גם להשתמש בגישה הפשוטה הבאה:
@Test הציבור בטל givenListContainsNulls_whenRemovingNullsWithPlainJavaAlternative_thenCorrect () {List list = Lists.newArrayList (null, 1, null); list.removeAll (Collections.singleton (null)); assertThat (רשימה, hasSize (1)); }
שים לב ששני הפתרונות הללו ישנו את רשימת המקורות.
2. הסר אפסים מ רשימה שימוש בגוגל גויאבה
אנחנו יכולים גם הסר אפסים באמצעות גויאבה וגישה פונקציונאלית יותר, באמצעות פרדיקטים:
@Test הציבור בטל givenListContainsNulls_whenRemovingNullsWithGuavaV1_thenCorrect () {List list = Lists.newArrayList (null, 1, null); Iterables.removeIf (רשימה, Predicates.isNull ()); assertThat (רשימה, hasSize (1)); }
לחלופין, אם איננו רוצים לשנות את רשימת המקורות, גויאבה תאפשר לנו ליצור רשימת סינונים חדשה:
@Test הציבור בטל givenListContainsNulls_whenRemovingNullsWithGuavaV2_thenCorrect () {List list = Lists.newArrayList (null, 1, null, 2, 3); List listWithoutNulls = Lists.newArrayList (Iterables.filter (list, Predicates.notNull ())); assertThat (listWithoutNulls, hasSize (3)); }
3. הסר אפסים מ- a רשימה שימוש באוספי Apache Commons
בואו נסתכל על פתרון פשוט באמצעות ספריית אוספי Apache Commons תוך שימוש בסגנון פונקציונלי דומה:
@Test הציבור בטל givenListContainsNulls_whenRemovingNullsWithCommonsCollections_thenCorrect () {List list = Lists.newArrayList (null, 1, 2, null, 3, null); CollectionUtils.filter (רשימה, PredicateUtils.notNullPredicate ()); assertThat (רשימה, hasSize (3)); }
שים לב שפתרון זה יהיה גם כן לשנות את הרשימה המקורית.
4. הסר אפסים מ- a רשימה שימוש במבדות (Java 8)
לסיום - בואו נסתכל פתרון Java 8 באמצעות Lambdas לסינון הרשימה; ניתן לבצע את תהליך הסינון במקביל או סדרתי:
@Test ציבור בטל givenListContainsNulls_whenFilteringParallel_thenCorrect () {List list = Lists.newArrayList (null, 1, 2, null, 3, null); List listWithoutNulls = list.parallelStream () .filter (Objects :: nonNull) .collect (Collectors.toList ()); } @Test ציבורי בטל givenListContainsNulls_whenFilteringSerial_thenCorrect () {List list = Lists.newArrayList (null, 1, 2, null, 3, null); List listWithoutNulls = list.stream () .filter (אובייקטים :: nonNull) .collect (Collectors.toList ()); } חלל ציבורי givenListContainsNulls_whenRemovingNullsWithRemoveIf_thenCorrect () {List listWithoutNulls = Lists.newArrayList (null, 1, 2, null, 3, null); listWithoutNulls.removeIf (אובייקטים :: isNull); assertThat (listWithoutNulls, hasSize (3)); }
וזהו - כמה פתרונות מהירים ושימושיים מאוד להיפטר מכל רכיבי ה- null מתוך רשימה.
5. מסקנה
במאמר זה הצלחנו לחקור את הגישות השונות שיכולות להיות לנו להסיר אפסים מ- a רשימה באמצעות Java, Guava או Lambdas.
את היישום של כל הדוגמאות והקטעים הללו ניתן למצוא בפרויקט GitHub. זהו פרויקט מבוסס Maven כך שיהיה קל לייבא ולהפעיל אותו.