Piet van Dongen 11 лет назад
Родитель
Сommit
58f57b387e

+ 2
- 1
config.json Просмотреть файл

@@ -22,7 +22,8 @@
22 22
     "binary",
23 23
     "prime-factors",
24 24
     "raindrops",
25
-    "allergies"
25
+    "allergies",
26
+    "strain"
26 27
   ],
27 28
   "deprecated": [
28 29
   ],

+ 11
- 0
strain/build.gradle Просмотреть файл

@@ -0,0 +1,11 @@
1
+apply plugin: "java"
2
+apply plugin: "eclipse"
3
+apply plugin: "idea"
4
+
5
+repositories {
6
+  mavenCentral()
7
+}
8
+
9
+dependencies {
10
+  testCompile "junit:junit:4.10"
11
+}

+ 16
- 0
strain/example.java Просмотреть файл

@@ -0,0 +1,16 @@
1
+import java.util.Collection;
2
+import java.util.function.Predicate;
3
+import java.util.stream.Collectors;
4
+
5
+public class Strain {
6
+
7
+	public static <T> Collection<T> keep(Collection<T> coll, Predicate<T> func)
8
+	{
9
+		return coll.stream().filter(func).collect(Collectors.toList());
10
+	}
11
+
12
+	public static <T> Collection<T> discard(Collection<T> coll, Predicate<T> func)
13
+	{
14
+		return coll.stream().filter(func.negate()).collect(Collectors.toList());
15
+	}
16
+}

+ 0
- 0
strain/src/main/java/.keep Просмотреть файл


+ 2
- 0
strain/src/main/java/Strain.java Просмотреть файл

@@ -0,0 +1,2 @@
1
+public class Strain {
2
+}

+ 121
- 0
strain/src/test/java/StrainTest.java Просмотреть файл

@@ -0,0 +1,121 @@
1
+import org.junit.Assert;
2
+import org.junit.Test;
3
+
4
+import java.util.Arrays;
5
+import java.util.LinkedList;
6
+import java.util.List;
7
+
8
+public class StrainTest {
9
+
10
+	@Test
11
+	public void emptyKeep() {
12
+		List<Integer> expected = new LinkedList<>();
13
+		List<Integer> test = new LinkedList<>();
14
+		Assert.assertEquals(expected, Strain.keep(test, x -> x < 10));
15
+	}
16
+
17
+	@Test
18
+	public void keepEverything() {
19
+		List<Integer> expected = Arrays.asList(1, 2, 3);
20
+		List<Integer> test = Arrays.asList(1, 2, 3);
21
+		Assert.assertEquals(expected, Strain.keep(test, x -> x < 10));
22
+	}
23
+
24
+	@Test
25
+	public void keepFirstAndLast() {
26
+		List<Integer> expected = Arrays.asList(1, 3);
27
+		List<Integer> test = Arrays.asList(1, 2, 3);
28
+		Assert.assertEquals(expected, Strain.keep(test, x -> x % 2 != 0));
29
+	}
30
+
31
+	@Test
32
+	public void keepNeitherFirstNorLast() {
33
+		List<Integer> expected = Arrays.asList(2, 4);
34
+		List<Integer> test = Arrays.asList(1, 2, 3, 4, 5);
35
+		Assert.assertEquals(expected, Strain.keep(test, x -> x % 2 == 0));
36
+	}
37
+
38
+	@Test
39
+	public void KeepStrings() {
40
+		List<String> words = Arrays
41
+				.asList("apple zebra banana zombies cherimoya zelot".split(" "));
42
+		List<String> expected = Arrays.asList("zebra", "zombies", "zelot");
43
+		Assert.assertEquals(expected,
44
+				Strain.keep(words, x -> x.startsWith("z")));
45
+	}
46
+
47
+	@Test
48
+	public void KeepArrays() {
49
+		List<List<Integer>> actual = Arrays.asList(
50
+				Arrays.asList(1, 2, 3),
51
+				Arrays.asList(5, 5, 5), 
52
+				Arrays.asList(5, 1, 2),
53
+				Arrays.asList(2, 1, 2), 
54
+				Arrays.asList(1, 5, 2),
55
+				Arrays.asList(2, 2, 1), 
56
+				Arrays.asList(1, 2, 5));
57
+		List<List<Integer>> expected = Arrays.asList(
58
+				Arrays.asList(5, 5, 5),
59
+				Arrays.asList(5, 1, 2), 
60
+				Arrays.asList(1, 5, 2),
61
+				Arrays.asList(1, 2, 5));
62
+		Assert.assertEquals(expected,
63
+				Strain.keep(actual, col -> col.contains(5)));
64
+	}
65
+
66
+	@Test
67
+	public void emptyDiscard() {
68
+		List<Integer> expected = new LinkedList<>();
69
+		List<Integer> test = new LinkedList<>();
70
+		Assert.assertEquals(expected, Strain.discard(test, x -> x < 10));
71
+	}
72
+
73
+	@Test
74
+	public void discardNothing() {
75
+		List<Integer> expected = Arrays.asList(1, 2, 3);
76
+		List<Integer> test = Arrays.asList(1, 2, 3);
77
+		Assert.assertEquals(expected, Strain.discard(test, x -> x > 10));
78
+	}
79
+
80
+	@Test
81
+	public void discardFirstAndLast() {
82
+		List<Integer> expected = Arrays.asList(2);
83
+		List<Integer> test = Arrays.asList(1, 2, 3);
84
+		Assert.assertEquals(expected, Strain.discard(test, x -> x % 2 != 0));
85
+
86
+	}
87
+
88
+	@Test
89
+	public void discardNeitherFirstNorLast() {
90
+		List<Integer> expected = Arrays.asList(1, 3, 5);
91
+		List<Integer> test = Arrays.asList(1, 2, 3, 4, 5);
92
+		Assert.assertEquals(expected, Strain.discard(test, x -> x % 2 == 0));
93
+	}
94
+
95
+	@Test
96
+	public void discardStrings() {
97
+		List<String> words = Arrays
98
+				.asList("apple zebra banana zombies cherimoya zelot".split(" "));
99
+		List<String> expected = Arrays.asList("apple", "banana", "cherimoya");
100
+		Assert.assertEquals(expected,
101
+				Strain.discard(words, x -> x.startsWith("z")));
102
+	}
103
+
104
+	@Test
105
+	public void discardArrays() {
106
+		List<List<Integer>> actual = Arrays.asList(
107
+				Arrays.asList(1, 2, 3),
108
+				Arrays.asList(5, 5, 5),
109
+				Arrays.asList(5, 1, 2),
110
+				Arrays.asList(2, 1, 2),
111
+				Arrays.asList(1, 5, 2),
112
+				Arrays.asList(2, 2, 1),
113
+				Arrays.asList(1, 2, 5));
114
+		List<List<Integer>> expected = Arrays.asList(
115
+				Arrays.asList(1, 2, 3),
116
+				Arrays.asList(2, 1, 2),
117
+				Arrays.asList(2, 2, 1));
118
+		Assert.assertEquals(expected,
119
+				Strain.discard(actual, col -> col.contains(5)));
120
+	}
121
+}