diff --git a/seq/src/main/java/com/jmonad/seq/Seq.java b/seq/src/main/java/com/jmonad/seq/Seq.java index 253ca5b..12155e3 100755 --- a/seq/src/main/java/com/jmonad/seq/Seq.java +++ b/seq/src/main/java/com/jmonad/seq/Seq.java @@ -270,6 +270,34 @@ public Seq uniqueBy(Function fn) { return buffer; } + /** + * Returns the first n elements of the sequence + * @param amount + * @return Seq + */ + public Seq take(int amount) { + Seq buffer = new Seq<>(); + if (amount <= 0) return buffer; + if (amount > this.list.size()) return new Seq<>(this.list); + + for (int i = 0; i < amount; i++) buffer.add(this.list.get(i)); + return buffer; + } + + /** + * Remove the first n elements of the sequence + * @param amount + * @return Seq + */ + public Seq drop(int amount) { + Seq buffer = new Seq<>(); + if (amount <= 0) return new Seq<>(this.list); + if (amount > this.list.size()) return buffer; + + for (int i = amount; i < this.list.size(); i++) buffer.add(this.list.get(i)); + return buffer; + } + /** * Takes a list of items, and using the binary function supplied, folds them * into a single value. Requires an initial value (the second argument), diff --git a/seq/src/test/java/com/jmonad/seq/SeqDropTest.java b/seq/src/test/java/com/jmonad/seq/SeqDropTest.java new file mode 100644 index 0000000..6a22a0d --- /dev/null +++ b/seq/src/test/java/com/jmonad/seq/SeqDropTest.java @@ -0,0 +1,25 @@ +package com.jmonad.seq; + +import org.junit.Test; + +public class SeqDropTest { + + private Integer[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + private Seq elements = new Seq<>(numbers); + + @Test public void dropListElementsTest() { + assert elements.drop(5).toArrayList().toString().equals("[6, 7, 8, 9, 10]"); + } + + @Test public void dropElementsWithNoAmountTest() { + assert elements.drop(0).toArrayList().toString().equals("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"); + } + + @Test public void dropElementsWithNegativeAmountTest() { + assert elements.drop(-1).toArrayList().toString().equals("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"); + } + + @Test public void dropElementsWithAmountHigherThanListSizeTest() { + assert elements.drop(20).toArrayList().toString().equals("[]"); + } +} diff --git a/seq/src/test/java/com/jmonad/seq/SeqTakeTest.java b/seq/src/test/java/com/jmonad/seq/SeqTakeTest.java new file mode 100644 index 0000000..6f6ccce --- /dev/null +++ b/seq/src/test/java/com/jmonad/seq/SeqTakeTest.java @@ -0,0 +1,25 @@ +package com.jmonad.seq; + +import org.junit.Test; + +public class SeqTakeTest { + + private Integer[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + private Seq elements = new Seq<>(numbers); + + @Test public void takeListElementsTest() { + assert elements.take(5).toArrayList().toString().equals("[1, 2, 3, 4, 5]"); + } + + @Test public void takeElementsWithNoAmountTest() { + assert elements.take(0).toArrayList().toString().equals("[]"); + } + + @Test public void takeElementsWithNegativeAmountTest() { + assert elements.take(-1).toArrayList().toString().equals("[]"); + } + + @Test public void takeElementsWithAmountHigherThanListSizeTest() { + assert elements.take(20).toArrayList().toString().equals("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"); + } +}