רידוד אוספים מקוננים בג'אווה

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

במאמר מהיר זה, נחקור כיצד לשטח אוסף מקונן ב- Java.

2. דוגמה לאוסף מקונן

נניח שיש לנו רשימה של רשימות מסוג חוּט.

רשימה nestedList = asList (asList ("one: one"), asList ("two: one", "two: two", "two: three"), asList ("three: one", "three: two", "three : שלוש "," שלוש: ארבע "));

3. רידוד רשימה עם לכל אחד

על מנת לשטח את האוסף המקונן הזה לרשימת מיתרים, נוכל להשתמש בו לכל אחד יחד עם הפניה לשיטת Java 8:

רשימת הציבור flattenListOfLists באופן מושלם (רשימה nestedList) {רשימה ls = ArrayList חדש (); nestedList.forEach (ls :: addAll); החזר ls; } 

וכאן תוכלו לראות את השיטה בפעולה:

@Test public void givenNestedList_thenFlattenImperatively () {List ls = flattenListOfListsImperatively (nestedList); assertNotNull (ls); assertTrue (ls.size () == 8); assertThat (ls, IsIterableContainingInOrder.contains ("one: one", "two: one", "two: two", "two: three", "three: one", "three: two", "three: three", "שלוש ארבע")); }

4. רידוד רשימה עם flatMap

אנו יכולים גם לשטח את הרשימה המקוננת על ידי שימוש ב- flatMap שיטה מה- זרם ממשק API.

זה מאפשר לנו לשטח את המקונן זרם לבנות ולבסוף לאסוף את כל האלמנטים לאוסף מסוים:

רשימה ציבורית flattenListOfListsStream (רשימה list) {return list.stream () .flatMap (Collection :: stream) .collect (Collectors.toList ()); } 

והנה ההיגיון בפעולה:

@Test public void givenNestedList_thenFlattenFunctionally () {List ls = flattenListOfListsStream (nestedList); assertNotNull (ls); assertTrue (ls.size () == 8); }

5. מסקנה

פשוט forEach או flatMap ניתן להשתמש בשיטות ב- Java 8, בשילוב עם הפניות לשיטות, לרידוד אוספים מקוננים.

אתה יכול למצוא את הקוד שנדון במאמר זה באתר GitHub.


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