Skip to content

Commit cab823f

Browse files
committed
New Feature Examples, Corrections & Rewrites
1 parent 0fedf43 commit cab823f

31 files changed

+779
-376
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ includes tests to verify that the code in the book is correct.
88

99
> NOTE: Do not attempt to use JDK 16 or greater with gradle.
1010
> This produces a `BUG!` message from Gradle, which is broken for those versions.
11+
> To test new Java features in JDK 16 or 17 you must compile and run those examples by hand.
1112
1213
## Contents
1314

collectiontopics/CanonicalMapping.java

Lines changed: 16 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,49 +4,29 @@
44
// Visit http://OnJava8.com for more book information.
55
// Demonstrates WeakHashMap
66
import java.util.*;
7-
8-
class Element {
9-
private String ident;
10-
Element(String id) { ident = id; }
11-
@Override public String toString() { return ident; }
12-
@Override public int hashCode() {
13-
return Objects.hashCode(ident);
14-
}
15-
@Override public boolean equals(Object r) {
16-
return r instanceof Element &&
17-
Objects.equals(ident, ((Element)r).ident);
18-
}
19-
@SuppressWarnings("deprecation")
20-
@Override protected void finalize() {
21-
System.out.println("Finalizing " +
22-
getClass().getSimpleName() + " " + ident);
23-
}
24-
}
25-
26-
class Key extends Element {
27-
Key(String id) { super(id); }
28-
}
29-
30-
class Value extends Element {
31-
Value(String id) { super(id); }
32-
}
7+
import java.util.stream.*;
338

349
public class CanonicalMapping {
10+
static void showKeys(Map<String, String> m) {
11+
// Display sorted keys
12+
List<String> keys = new ArrayList<>(m.keySet());
13+
Collections.sort(keys);
14+
System.out.println(keys);
15+
}
3516
public static void main(String[] args) {
36-
int size = 1000;
37-
// Or, choose size via the command line:
38-
if(args.length > 0)
39-
size = Integer.valueOf(args[0]);
40-
Key[] keys = new Key[size];
41-
WeakHashMap<Key,Value> map =
17+
int size = 100;
18+
String[] savedKeys = new String[size];
19+
WeakHashMap<String,String> map =
4220
new WeakHashMap<>();
4321
for(int i = 0; i < size; i++) {
44-
Key k = new Key(Integer.toString(i));
45-
Value v = new Value(Integer.toString(i));
22+
String key = String.format("%03d", i);
23+
String value = Integer.toString(i);
4624
if(i % 3 == 0)
47-
keys[i] = k; // Save as "real" references
48-
map.put(k, v);
25+
savedKeys[i] = key; // Save as "real" references
26+
map.put(key, value);
4927
}
28+
showKeys(map);
5029
System.gc();
30+
showKeys(map);
5131
}
5232
}

collectiontopics/ListSortSearch.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ public static void main(String[] args) {
1313
System.out.println(list);
1414
Collections.shuffle(list, new Random(47));
1515
System.out.println("Shuffled: " + list);
16-
// Use ListIterator to trim off last elements:
17-
ListIterator<String> it = list.listIterator(10);
18-
while(it.hasNext()) {
16+
ListIterator<String> it =
17+
list.listIterator(10); // [1]
18+
while(it.hasNext()) { // [2]
1919
it.next();
2020
it.remove();
2121
}

collectiontopics/QueueBehavior.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ static Stream<String> strings() {
1515
}
1616
static void test(int id, Queue<String> queue) {
1717
System.out.print(id + ": ");
18-
strings().map(queue::offer).count();
18+
strings().forEach(queue::offer);
1919
while(queue.peek() != null)
2020
System.out.print(queue.remove() + " ");
2121
System.out.println();

concurrent/PSP2.txt

Lines changed: 1 addition & 247 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
0: main
2-
1: ForkJoinPool.commonPool-worker-2
2+
1: main
33
2: main
44
3: main
55
4: main
@@ -8,249 +8,3 @@
88
7: main
99
8: main
1010
9: main
11-
10: main
12-
11: main
13-
12: main
14-
13: main
15-
14: main
16-
15: main
17-
16: main
18-
17: main
19-
18: main
20-
19: main
21-
20: main
22-
21: main
23-
22: main
24-
23: main
25-
24: main
26-
25: main
27-
26: main
28-
27: main
29-
28: main
30-
29: main
31-
30: main
32-
31: main
33-
32: main
34-
33: main
35-
34: main
36-
35: main
37-
36: main
38-
37: main
39-
38: main
40-
39: main
41-
40: main
42-
41: main
43-
42: main
44-
43: main
45-
44: main
46-
45: main
47-
46: main
48-
47: main
49-
48: main
50-
49: main
51-
50: main
52-
51: main
53-
52: main
54-
53: main
55-
54: main
56-
55: main
57-
56: main
58-
57: main
59-
58: main
60-
59: main
61-
60: main
62-
61: main
63-
62: main
64-
63: main
65-
64: main
66-
65: main
67-
66: main
68-
67: main
69-
68: main
70-
69: main
71-
70: main
72-
71: main
73-
72: main
74-
73: main
75-
74: main
76-
75: main
77-
76: main
78-
77: main
79-
78: main
80-
79: main
81-
80: main
82-
81: main
83-
82: main
84-
83: main
85-
84: main
86-
85: main
87-
86: main
88-
87: main
89-
88: main
90-
89: main
91-
90: main
92-
91: main
93-
92: main
94-
93: main
95-
94: main
96-
95: main
97-
96: main
98-
97: main
99-
98: main
100-
99: main
101-
100: main
102-
101: main
103-
102: main
104-
103: main
105-
104: main
106-
105: main
107-
106: main
108-
107: main
109-
108: main
110-
108: ForkJoinPool.commonPool-worker-2
111-
109: ForkJoinPool.commonPool-worker-2
112-
110: ForkJoinPool.commonPool-worker-2
113-
111: ForkJoinPool.commonPool-worker-2
114-
112: ForkJoinPool.commonPool-worker-2
115-
113: ForkJoinPool.commonPool-worker-2
116-
114: ForkJoinPool.commonPool-worker-2
117-
115: ForkJoinPool.commonPool-worker-2
118-
116: ForkJoinPool.commonPool-worker-2
119-
117: ForkJoinPool.commonPool-worker-2
120-
118: ForkJoinPool.commonPool-worker-2
121-
119: ForkJoinPool.commonPool-worker-2
122-
120: ForkJoinPool.commonPool-worker-2
123-
121: ForkJoinPool.commonPool-worker-2
124-
122: ForkJoinPool.commonPool-worker-2
125-
123: ForkJoinPool.commonPool-worker-2
126-
124: ForkJoinPool.commonPool-worker-2
127-
125: ForkJoinPool.commonPool-worker-2
128-
126: ForkJoinPool.commonPool-worker-2
129-
127: ForkJoinPool.commonPool-worker-2
130-
128: ForkJoinPool.commonPool-worker-2
131-
129: ForkJoinPool.commonPool-worker-2
132-
130: ForkJoinPool.commonPool-worker-2
133-
131: ForkJoinPool.commonPool-worker-2
134-
132: ForkJoinPool.commonPool-worker-2
135-
133: ForkJoinPool.commonPool-worker-2
136-
134: ForkJoinPool.commonPool-worker-2
137-
135: ForkJoinPool.commonPool-worker-2
138-
136: ForkJoinPool.commonPool-worker-2
139-
137: ForkJoinPool.commonPool-worker-2
140-
138: ForkJoinPool.commonPool-worker-2
141-
139: ForkJoinPool.commonPool-worker-2
142-
140: ForkJoinPool.commonPool-worker-2
143-
141: ForkJoinPool.commonPool-worker-2
144-
142: ForkJoinPool.commonPool-worker-2
145-
143: ForkJoinPool.commonPool-worker-2
146-
144: ForkJoinPool.commonPool-worker-2
147-
145: ForkJoinPool.commonPool-worker-2
148-
146: ForkJoinPool.commonPool-worker-2
149-
147: ForkJoinPool.commonPool-worker-2
150-
148: ForkJoinPool.commonPool-worker-2
151-
149: ForkJoinPool.commonPool-worker-2
152-
150: ForkJoinPool.commonPool-worker-2
153-
151: ForkJoinPool.commonPool-worker-2
154-
152: ForkJoinPool.commonPool-worker-2
155-
153: ForkJoinPool.commonPool-worker-2
156-
154: ForkJoinPool.commonPool-worker-2
157-
155: ForkJoinPool.commonPool-worker-2
158-
156: ForkJoinPool.commonPool-worker-2
159-
157: ForkJoinPool.commonPool-worker-2
160-
158: ForkJoinPool.commonPool-worker-2
161-
159: ForkJoinPool.commonPool-worker-2
162-
160: ForkJoinPool.commonPool-worker-2
163-
161: ForkJoinPool.commonPool-worker-2
164-
162: ForkJoinPool.commonPool-worker-2
165-
163: ForkJoinPool.commonPool-worker-2
166-
164: ForkJoinPool.commonPool-worker-2
167-
165: ForkJoinPool.commonPool-worker-2
168-
166: ForkJoinPool.commonPool-worker-2
169-
167: ForkJoinPool.commonPool-worker-2
170-
168: ForkJoinPool.commonPool-worker-2
171-
169: ForkJoinPool.commonPool-worker-2
172-
170: ForkJoinPool.commonPool-worker-2
173-
171: ForkJoinPool.commonPool-worker-2
174-
172: ForkJoinPool.commonPool-worker-2
175-
173: ForkJoinPool.commonPool-worker-2
176-
174: ForkJoinPool.commonPool-worker-2
177-
175: ForkJoinPool.commonPool-worker-2
178-
176: ForkJoinPool.commonPool-worker-2
179-
177: ForkJoinPool.commonPool-worker-2
180-
178: ForkJoinPool.commonPool-worker-2
181-
179: ForkJoinPool.commonPool-worker-2
182-
180: ForkJoinPool.commonPool-worker-2
183-
181: ForkJoinPool.commonPool-worker-2
184-
182: ForkJoinPool.commonPool-worker-2
185-
183: ForkJoinPool.commonPool-worker-2
186-
184: ForkJoinPool.commonPool-worker-2
187-
185: ForkJoinPool.commonPool-worker-2
188-
186: ForkJoinPool.commonPool-worker-2
189-
187: ForkJoinPool.commonPool-worker-2
190-
188: ForkJoinPool.commonPool-worker-2
191-
189: ForkJoinPool.commonPool-worker-2
192-
190: ForkJoinPool.commonPool-worker-2
193-
191: ForkJoinPool.commonPool-worker-2
194-
192: ForkJoinPool.commonPool-worker-2
195-
193: ForkJoinPool.commonPool-worker-2
196-
194: ForkJoinPool.commonPool-worker-2
197-
195: ForkJoinPool.commonPool-worker-2
198-
196: ForkJoinPool.commonPool-worker-2
199-
197: ForkJoinPool.commonPool-worker-2
200-
198: ForkJoinPool.commonPool-worker-2
201-
199: ForkJoinPool.commonPool-worker-2
202-
200: ForkJoinPool.commonPool-worker-2
203-
201: ForkJoinPool.commonPool-worker-2
204-
202: ForkJoinPool.commonPool-worker-2
205-
203: ForkJoinPool.commonPool-worker-2
206-
204: ForkJoinPool.commonPool-worker-2
207-
205: ForkJoinPool.commonPool-worker-2
208-
206: ForkJoinPool.commonPool-worker-2
209-
207: ForkJoinPool.commonPool-worker-2
210-
208: ForkJoinPool.commonPool-worker-2
211-
209: ForkJoinPool.commonPool-worker-2
212-
210: ForkJoinPool.commonPool-worker-2
213-
211: ForkJoinPool.commonPool-worker-2
214-
212: ForkJoinPool.commonPool-worker-2
215-
213: ForkJoinPool.commonPool-worker-2
216-
214: ForkJoinPool.commonPool-worker-2
217-
215: ForkJoinPool.commonPool-worker-2
218-
216: ForkJoinPool.commonPool-worker-2
219-
217: ForkJoinPool.commonPool-worker-2
220-
218: ForkJoinPool.commonPool-worker-2
221-
219: ForkJoinPool.commonPool-worker-2
222-
220: ForkJoinPool.commonPool-worker-2
223-
221: ForkJoinPool.commonPool-worker-2
224-
222: ForkJoinPool.commonPool-worker-2
225-
223: ForkJoinPool.commonPool-worker-2
226-
224: ForkJoinPool.commonPool-worker-2
227-
225: ForkJoinPool.commonPool-worker-2
228-
226: ForkJoinPool.commonPool-worker-2
229-
227: ForkJoinPool.commonPool-worker-2
230-
228: ForkJoinPool.commonPool-worker-2
231-
229: ForkJoinPool.commonPool-worker-2
232-
230: ForkJoinPool.commonPool-worker-2
233-
231: ForkJoinPool.commonPool-worker-2
234-
232: ForkJoinPool.commonPool-worker-2
235-
233: ForkJoinPool.commonPool-worker-2
236-
234: ForkJoinPool.commonPool-worker-2
237-
236: main
238-
237: main
239-
238: main
240-
239: main
241-
240: main
242-
241: main
243-
242: main
244-
243: main
245-
244: main
246-
245: main
247-
246: main
248-
247: main
249-
248: main
250-
249: main
251-
250: main
252-
251: main
253-
252: main
254-
253: main
255-
254: main
256-
255: main

enumerations/ArrowInSwitch.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// enumerations/ArrowInSwitch.java
2+
// (c)2021 MindView LLC: see Copyright.txt
3+
// We make no guarantees that this code is fit for any purpose.
4+
// Visit http://OnJava8.com for more book information.
5+
// {NewFeature} Since JDK 14
6+
import static java.util.stream.IntStream.range;
7+
8+
public class ArrowInSwitch {
9+
static void colons(int i) {
10+
switch(i) {
11+
case 1: System.out.println("one");
12+
break;
13+
case 2: System.out.println("two");
14+
break;
15+
case 3: System.out.println("three");
16+
break;
17+
default: System.out.println("default");
18+
}
19+
}
20+
static void arrows(int i) {
21+
switch(i) {
22+
case 1 -> System.out.println("one");
23+
case 2 -> System.out.println("two");
24+
case 3 -> System.out.println("three");
25+
default -> System.out.println("default");
26+
}
27+
}
28+
public static void main(String[] args) {
29+
range(0, 4).forEach(i -> colons(i));
30+
range(0, 4).forEach(i -> arrows(i));
31+
}
32+
}
33+
/* Output:
34+
default
35+
one
36+
two
37+
three
38+
default
39+
one
40+
two
41+
three
42+
*/

0 commit comments

Comments
 (0)