From 55dcf214f58e94a86d126e907d0183b3b63d702a Mon Sep 17 00:00:00 2001 From: Klemek Date: Mon, 18 Jun 2018 15:10:34 +0200 Subject: [PATCH] BetterLists 1.4 --- README.md | 11 +++++----- download/betterlists-1.4.jar | Bin 0 -> 8820 bytes src/fr/klemek/betterlists/BetterList.java | 18 +++++++++++++++- .../betterlists/test/BetterListsTests.java | 20 ++++++++++++++++-- 4 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 download/betterlists-1.4.jar diff --git a/README.md b/README.md index 55a4322..f7ed4d9 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ NOTE : Please note that, unlike C# LINQ, these functions are not optimized at lo ## Download -* [betterlists-1.3.jar](../../raw/master/download/betterlists-1.3.jar) +* [betterlists-1.4.jar](../../raw/master/download/betterlists-1.4.jar) ## Maven @@ -49,7 +49,7 @@ You can use this project as a maven dependency with this : klemek betterlists - 1.3 + 1.4 ``` @@ -71,7 +71,7 @@ You can use this project as a maven dependency with this : | [orderBy / orderByDescending](#orderby-orderbydescending) | Sorts the elements of a sequence in ascending order by using a specified comparator. (You can user orderByDescending to change the order) | | [reverse](#reverse) | Inverts the order of the elements in the sequence. | | [select](#select) | Projects each element of a sequence into a new form. | -| [selectMany](#selectmany) | Projects each element of a sequence into a new list and flattens the resulting sequences into one sequence. | +| [selectMany / selectManyArrays](#selectmany-selectmanyarrays) | Projects each element of a sequence into a new list and flattens the resulting sequences into one sequence. | | [skip / skipWhile](#skip-skipwhile) | Bypasses elements in the sequence as long as a specified condition is true and then returns the remaining elements. | | [sum](#sum) | Computes the sum of the sequence of Double values that are obtained by invoking a transform function on each element of the input sequence. | | [take / takeWhile](#take-takewhile) | Returns a specified number of contiguous elements from the start of the sequence. | @@ -178,12 +178,13 @@ BetterArrayList contacts = BetterArrayList.fromList(someFunction()); BetterList contactsMails = contacts.select(c -> c.getEmail()); ``` -### selectMany +### selectMany / selectManyArrays Projects each element of a sequence into a new list and flattens the resulting sequences into one sequence. ```Java BetterArrayList contacts = BetterArrayList.fromList(someFunction()); -BetterList contactsMails = contacts.select(c -> c.getEmail().split(";")); +BetterList contactsNumbers = contacts.selectMany(c -> c.getAllPhoneNumbers()); +BetterList contactsMails = contacts.selectManyArrays(c -> c.getEmail().split(";")); ``` diff --git a/download/betterlists-1.4.jar b/download/betterlists-1.4.jar new file mode 100644 index 0000000000000000000000000000000000000000..3630d44cb79fc036ec7aea570773598614d301ae GIT binary patch literal 8820 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 Y=}=RA0sku!>G?DG+@nt=|Ml&E0M@p-qyPW_ literal 0 HcmV?d00001 diff --git a/src/fr/klemek/betterlists/BetterList.java b/src/fr/klemek/betterlists/BetterList.java index 6940787..3da76dc 100644 --- a/src/fr/klemek/betterlists/BetterList.java +++ b/src/fr/klemek/betterlists/BetterList.java @@ -307,7 +307,23 @@ public interface BetterList extends List { * @return A List whose elements are the result of invoking the one-to-many * transform function on each element of the input sequence. */ - default BetterList selectMany(Function selector) { + default BetterList selectMany(Function> selector) { + BetterList out = new BetterArrayList<>(); + for (T element : this) + out.addAll(selector.apply(element)); + return out; + } + + /** + * Projects each element of a sequence into a new list and flattens the + * resulting sequences into one sequence. + * + * @param The type of the projected values lists + * @param selector - A transform function to apply to each element. + * @return A List whose elements are the result of invoking the one-to-many + * transform function on each element of the input sequence. + */ + default BetterList selectManyArrays(Function selector) { BetterList out = new BetterArrayList<>(); for (T element : this) out.addAll(Arrays.asList(selector.apply(element))); diff --git a/test/fr/klemek/betterlists/test/BetterListsTests.java b/test/fr/klemek/betterlists/test/BetterListsTests.java index e9b517d..72e1f01 100644 --- a/test/fr/klemek/betterlists/test/BetterListsTests.java +++ b/test/fr/klemek/betterlists/test/BetterListsTests.java @@ -5,6 +5,8 @@ import org.junit.Assert; import org.junit.Test; import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.NoSuchElementException; public class BetterListsTests { @@ -241,12 +243,26 @@ public class BetterListsTests { } @Test - public void testSelectMany() { + public void testSelectManyArrays() { BetterArrayList bal1 = new BetterArrayList<>(); bal1.add(new Dummy(1d, "hel;lo")); bal1.add(new Dummy(2d, "hel;lo")); - BetterArrayList bal2 = (BetterArrayList) bal1.selectMany(du -> du.s.split(";")); + BetterArrayList bal2 = (BetterArrayList) bal1.selectManyArrays(du -> du.s.split(";")); + Assert.assertEquals(4, bal2.size()); + Assert.assertEquals("hel", bal2.get(0)); + Assert.assertEquals("lo", bal2.get(1)); + Assert.assertEquals("hel", bal2.get(2)); + Assert.assertEquals("lo", bal2.get(3)); + } + + @Test + public void testSelectMany() { + BetterArrayList> bal1 = new BetterArrayList<>(); + bal1.add(Arrays.asList("hel","lo")); + bal1.add(Arrays.asList("hel","lo")); + + BetterArrayList bal2 = (BetterArrayList) bal1.selectMany(du -> du); Assert.assertEquals(4, bal2.size()); Assert.assertEquals("hel", bal2.get(0)); Assert.assertEquals("lo", bal2.get(1));