Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package exercises;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.DoublePredicate;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
/**
* This set of exercises is about lambdas and method references.
* You will write a lambda or method reference corresponding to
* each of several different functional interfaces. Each exercise
* is named after the functional interface intended to be used
* as the solution.
*/
public class A_LambdasAndMethodReferences {
@Test @Ignore
public void a01predicate() {
// TODO: write a lambda expression that is a predicate
// that tests whether a string is longer than four characters.
Predicate<String> pred = null;
assertTrue(pred.test("abcde"));
assertFalse(pred.test("abcd"));
}
@Test @Ignore
public void a02predicate() {
// TODO: write a lambda expression that is a predicate
// that tests whether a string is empty
Predicate<String> pred = null;
assertTrue(pred.test(""));
assertFalse(pred.test("a"));
}
@Test @Ignore
public void a03predicate() {
// TODO: write a method reference that is a predicate
// that tests whether a string is empty
Predicate<String> pred = null;
assertTrue(pred.test(""));
assertFalse(pred.test("a"));
}
@Test @Ignore
public void a04function() {
// TODO: write a lambda expression that wraps the given
// string in parentheses.
Function<String, String> func = null;
assertEquals("(abc)", func.apply("abc"));
}
@Test @Ignore
public void a05function() {
// TODO: write a lambda expression that converts the
// given string to upper case.
Function<String, String> func = null;
assertEquals("ABC", func.apply("abc"));
}
@Test @Ignore
public void a06function() {
// TODO: write a method reference that converts the
// given string to upper case.
Function<String, String> func = null;
assertEquals("ABC", func.apply("abc"));
}
@Test @Ignore
public void a07consumer() {
// TODO: write a lambda expression that appends the
// string "abc" to the given StringBuilder.
Consumer<StringBuilder> cons = null;
StringBuilder sb = new StringBuilder("xyz");
cons.accept(sb);
assertEquals("xyzabc", sb.toString());
}
@Test @Ignore
public void a08consumer() {
// TODO: write a lambda expression that clears the given list.
Consumer<List<String>> cons = null;
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
cons.accept(list);
assertTrue(list.isEmpty());
}
@Test @Ignore
public void a09consumer() {
// TODO: write a method reference that clears the given list.
Consumer<List<String>> cons = null;
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
cons.accept(list);
assertTrue(list.isEmpty());
}
@Test @Ignore
public void a10supplier() {
// TODO: write a lambda expression that returns a new StringBuilder
// containing the string "abc".
Supplier<StringBuilder> sup = () -> new StringBuilder("abc");
assertEquals("abc", sup.get().toString());
}
@Test @Ignore
public void a11supplier() {
// TODO: write a lambda expression that returns a new, empty StringBuilder
Supplier<StringBuilder> sup = null;
assertEquals("", sup.get().toString());
}
@Test @Ignore
public void a12supplier() {
// TODO: write a method reference that returns a new, empty StringBuilder
Supplier<StringBuilder> sup = null;
assertEquals("", sup.get().toString());
}
@Test @Ignore
public void a13doublepredicate() {
// TODO: write a lambda expression that tests whether a double value
// is greater than 10.0.
DoublePredicate pred = d -> d > 10.0;
assertTrue(pred.test(15.0));
assertFalse(pred.test(5.0));
}
@Test @Ignore
public void a14doublepredicate() {
// TODO: write a lambda expression that tests whether a double value
// is finite.
DoublePredicate pred = d -> Double.isFinite(d);
assertTrue(pred.test(0.0));
assertFalse(pred.test(Double.POSITIVE_INFINITY));
}
@Test @Ignore
public void a15doublepredicate() {
// TODO: write a method reference that tests whether a double value
// is finite.
DoublePredicate pred = Double::isFinite;
assertTrue(pred.test(0.0));
assertFalse(pred.test(Double.POSITIVE_INFINITY));
}
@Test @Ignore
public void a16bifunction() {
// TODO: write a lambda expression, given two strings, returns the result
// of concatenating the first, followed by the second, followed by the
// first again.
BiFunction<String, String, String> bifunc = (s1, s2) -> s1 + s2 + s1;
assertEquals("abcdefabc", bifunc.apply("abc", "def"));
}
@Test @Ignore
public void a17bifunction() {
// TODO: write a lambda expression that returns the index of
// the first occurrence the second string within the first string,
// or -1 if the second string doesn't occur within the first string.
BiFunction<String, String, Integer> bifunc = (s1, s2) -> s1.indexOf(s2);
assertTrue(bifunc.apply("abcdefghi", "def") == 3);
assertTrue(bifunc.apply("abcdefghi", "xyz") == -1);
}
@Test @Ignore
public void a18bifunction() {
// TODO: write a method reference that returns the index of
// the first occurrence the second string within the first string,
// or -1 if the second string doesn't occur within the first string.
BiFunction<String, String, Integer> bifunc = String::indexOf;
assertTrue(bifunc.apply("abcdefghi", "def") == 3);
assertTrue(bifunc.apply("abcdefghi", "xyz") == -1);
}
@Test @Ignore
public void a19runnable() {
StringBuilder sb = new StringBuilder("abc");
String suffix = "xyz";
// TODO: write a lambda expression that appends the 'suffix'
// variable (a String) to the sb variable (a StringBuilder).
Runnable r = () -> sb.append(suffix);
r.run();
r.run();
r.run();
assertEquals("abcxyzxyzxyz", sb.toString());
}
}