KEMBAR78
Java for advanced users | PDF
Java for Advanced Users
Combine Object-oriented Java with Functional coding
Marius Claassen,
Java for Advanced Users
Refine your programming skills, by using
the world’s most popular language to:
• Stay ahead of the competition
• Be the team leader
• Extend the language
2
Marius Claassen,
Java for Advanced Users
About me
Marius Claassen, Java Developer and Teacher
I taught myself to program using Java. Having been a teacher for many
years, I am now working full-time as an independent software
instructor, making video tutorials. My passions are learning, teaching
and Java in equal measure. It is my mission to help others learn
programming in general and Java in particular.
3
Marius Claassen,
Java for Advanced Users
Benefits
• Implement advanced concepts
• Develop complex Java applications
• Devise Java solutions when given a
problem statement
4
Marius Claassen,
Java for Advanced Users
Major components
1. Introduction
2. Java class design
3. Collections
4. Strings
5. Recursion
6. Input / Output
7. Error handling
8. Conclusion
5
Marius Claassen,
Java for Advanced Users
Lecture outline
• 30 Lectures
• 5 minutes
1. Video
2. PDF
3. Coding exercise
6
Marius Claassen,
Java for Advanced Users
Development tools
• JDK (SE 9)
http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html
• IDE (IntelliJ IDEA)
https://www.jetbrains.com/idea/download/#section=windows
7
Marius Claassen,
Java for Advanced Users
Ideal student
Completed intermediate course
You want to specialize by:
• watching live coding
• doing coding exercises
• checking answers against solutions
8
Marius Claassen,
Java for Advanced Users
Enrolment
• 30-day money back guarantee
9
Marius Claassen,
Java for Advanced Users
To access this course:
• https://www.udemy.com/course/1133522/manage/basics/
or
• mariusclaassen@gmail.com
10
Marius Claassen,
Java for Advanced Users
TOPICS
1. Introduction
2. Java class design
3. Collections
4. Strings
5. Recursion
6. Input / Output
7. Error handling
8. Conclusion
11
Marius Claassen,
Java for Advanced Users
Lecture 2: Interfaces example
Interfaces problem statement:
Implement an interface, ‘Startable’ to print
the strings, ‘Tractor started’ and
‘Dishwasher stopped’
12
Marius Claassen,
Java for Advanced Users
Lecture 2: Interfaces example
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
13
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class Lecture2 {
public static void main(String[] args) {
Tractor tractor = new Tractor();
tractor.start();
System.out.print(“, ”);
Startable dishwasher = new Dishwasher();
dishwasher.stop(); } }
// Tractor started, Dishwasher stopped
14
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public interface Startable {
public void start();
public void stop();
}
15
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class Tractor implements Startable {
@Override public void start() {
System.out.print(“Tractor started”); }
@Override public void stop() {
System.out.print(“Tractor stopped”); }
}
16
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class Dishwasher implements Startable {
@Override public void start() {
System.out.print(“Dishwasher started”); }
@Override public void stop() {
System.out.print(“Dishwasher stopped”); }
}
17
Marius Claassen,
Java for Advanced Users
Lecture 2: Interfaces exercise
Implement an interface, ‘Openable’ to print
the strings, ‘Cashregister opened’ and ‘Utility
account closed’
18
Marius Claassen,
Java for Advanced Users
Lecture 3: Interfaces solution
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
19
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class Lecture3 {
public static void main(String[] args) {
Cashregister cashregister = new Cashregister();
cashregister.open();
System.out.print(“, ”);
Openable utilityAccount = new UtilityAccount();
utilityAccount.close(); } }
// Cashregister opened, Utility account closed
20
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public interface Openable {
public void open();
public void close();
}
21
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class Cashregister implements Openable {
@Override public void open() {
System.out.print(“Cashregister opened”); }
@Override public void close() {
System.out.print(“Cashregister closed”); }
}
22
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class UtilityAccount implements Openable {
@Override public void open() {
System.out.print(“Utility account opened”); }
@Override public void close() {
System.out.print(“Utility account closed”); }
}
23
Marius Claassen,
Java for Advanced Users
Lecture 4: Abstract class example
Abstract classes problem statement:
Implement an abstract class, ‘Vehicle’ to
print, ‘Car licensed’ and ‘Truck licensed’
24
Marius Claassen,
Java for Advanced Users
Lecture 4: Abstract class example
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
25
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class Lecture4 {
public static void main(String[] args) {
Car car = new Car();
car.licensing(“Car”);
Truck truck = new Truck();
truck.licensing(“Truck”); } }
// Car licensed, Truck licensed
26
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public abstract class Vehicle {
public abstract void licensing(String type);
}
27
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class Car extends Vehicle {
@Override public void licensing(String type) {
System.out.print(type + “ licensed, ”);
}
}
28
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class Truck extends Vehicle {
@Override public void licensing(String type) {
System.out.println(type + “ licensed”);
}
}
29
Marius Claassen,
Java for Advanced Users
Lecture 4: Abstract class exercise
Implement an abstract class, ‘Shape’ to print,
‘Circle diameter 10 metres’ and ‘Rectangle
size 15 square metres’
30
Marius Claassen,
Java for Advanced Users
Lecture 5: Abstract class solution
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
31
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class Lecture5 {
public static void main(String[] args) {
Circle circle = new Circle();
circle.resize(10);
Rectangle rectangle = new Rectangle();
rectangle.resize(15); } }
// Circle diameter 10 metres, Rectangle size 15 square metres
32
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public abstract class Shape {
public abstract void resize(int value);
}
33
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class Circle extends Shape {
@Override public void resize(int diameter) {
System.out.println(“Circle diameter ”+diameter+“ metres”);
}
}
34
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class Rectangle extends Shape {
@Override public void resize(int size) {
System.out.println(“Rectangle size ”+size+“ square
metres”);
}
}
35
Marius Claassen,
Java for Advanced Users
TOPICS
1. Introduction
2. Java class design
3. Collections
4. Strings
5. Recursion
6. Input / Output
7. Error handling
8. Conclusion
36
Marius Claassen,
Java for Advanced Users
Lecture 6: Generics example
Generics problem statement:
Implement generics to print the first 3
Hebrew letters as Integer, String pairs.
37
Marius Claassen,
Java for Advanced Users
Lecture 6: Generics example
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
38
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class Lecture6 {
public static void main(String[] args) {
Map<Integer, String> firstLetters = Map.of(1, “Alef”, “ ”,
“Bet”, 3, “Gimmel”);
firstLetters.forEach( (k,v) -> System.out.println(k+ “ ” +v) );
} }
// 1 Alef 2 Bet 3 Gimmel
39
Marius Claassen,
Java for Advanced Users
Lecture 6: Generics exercise
Implement generics to print the world’s
largest 3 cities as String, Integer pairs.
40
Marius Claassen,
Java for Advanced Users
package com.advancedjava;
public class Lecture7 {
public static void main(String[] args) {
Map<String, Integer> largestCities = Map.of(“Shanghai”,
“24256800 ”, “Beijing”, 21516000, “Delhi”, 16787941);
firstLetters.forEach( (k,v) -> System.out.println(k+ “ ” +v) );
} }
// Shanghai 24356800 Beijing 21516000 Delhi 16787941
41
Marius Claassen,
Java for Advanced Users
Lecture 8: Collections 1 example
Collections Part 1 problem statement:
Implement the ‘List’ collection and the ‘skip()’
to print a subset of numbers.
42
Marius Claassen,
Java for Advanced Users
Lecture 8: Collections 1 example
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
43
Marius Claassen,
Java for Advanced Users
package com.advancedjava; import java.util.List;
public class Lecture8 {
public static void main(String[] args) {
List<Integer> ints = List.of(14, 15, 16, 17, 18, 18, 19, 20);
ints.stream().skip(3).forEach(i->System.out.print(i + “ ”) );
} }
// 17 18 18 19 20
44
Marius Claassen,
Java for Advanced Users
Lecture 8: Collections 1 exercise
Implement the ‘List’ collection and the ‘limit()’
to print a subset of words.
45
Marius Claassen,
Java for Advanced Users
Lecture 9: Collections 1 solution
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
46
Marius Claassen,
Java for Advanced Users
package com.advancedjava; import java.util.List;
public class Lecture9 {
public static void main(String[] args) {
List<String> words = List.of(“Java”, ”is”, “number”, ”1”);
words.stream().limit(2).forEach(w->System.out.print(w+“ ”));
} }
// Java is
47
Marius Claassen,
Java for Advanced Users
Lecture 10: Collections 2 example
Collections Part 2 problem statement:
Implement the ‘Set’ collection to print all the
words in a set.
48
Marius Claassen,
Java for Advanced Users
Lecture 10: Collections 2 example
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
49
Marius Claassen,
Java for Advanced Users
package com.advancedjava; import java.util.Set;
public class Lecture10 {
public static void main(String[] args) {
Set<String> metals=Set.of(“gold”, “diamonds”, “platinum”);
metals.stream().forEach(m ->System.out.print(m+“ ”));
} }
// gold diamonds platinum
50
Marius Claassen,
Java for Advanced Users
Lecture 10: Collections 2 exercise
Implement the ‘Set’ collection to print all the
fractional values in a set.
51
Marius Claassen,
Java for Advanced Users
Lecture 11: Collections 2 solution
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
52
Marius Claassen,
Java for Advanced Users
Lecture 11: Collections 2 solution
package com.advancedjava; import java.util.Set;
public class Lecture11 {
public static void main(String[] args) {
Set<Double> values = List.of(31.5, 32.9, 33.7);
values.stream().forEach(v->System.out.print(v+“ ”));
} }
// 32.9 33.7 31.5
53
Marius Claassen,
Java for Advanced Users
Lecture 12: Sorting example
Sorting problem statement:
Implement the ‘Set’ collection to print
characters in their natural order.
54
Marius Claassen,
Java for Advanced Users
Lecture 12: Sorting example
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
55
Marius Claassen,
Java for Advanced Users
Lecture 12: Sorting example
package com.advancedjava; import java.util.Set;
public class Lecture12 {
public static void main(String[] args) {
Set<Character> chars=Set.of( ‘%’, ‘#’, ‘&’, ‘$’, ‘!’, ‘ " ’);
chars.stream().sorted().forEach(c->System.out.print(c+“ ”));
} }
// ! " # $ % &
56
Marius Claassen,
Java for Advanced Users
Lecture 12: Sorting exercise
Implement the ‘List’ collection to print
weekdays in their natural order.
57
Marius Claassen,
Java for Advanced Users
Lecture 13: Sorting solution
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
58
Marius Claassen,
Java for Advanced Users
Lecture 13: Sorting solution
package com.advancedjava; import java.time.DayOfWeek;
import java.util.List;
public class Lecture13 {
public static void main(String[] args) {
List<DayOfWeek> days = List.of(DayOfWeek.WEDNESDAY,
DayOfWeek.SATURDAY , DayOfWeek.MONDAY );
days.stream().sorted().forEach(d->System.out.print(d+“ ”));
} }
// MONDAY WEDNESDAY SATURDAY
59
Marius Claassen,
Java for Advanced Users
Lecture 14: Searching example
Searching problem statement:
Implement a ‘List’ and the ‘Optional’ class to
find the first integer divisible by 3.
60
Marius Claassen,
Java for Advanced Users
Lecture 14: Searching example
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
61
Marius Claassen,
Java for Advanced Users
Lecture 14: Searching example
package com.advancedjava; import java.util.List; import
java.util.Optional;
public class Lecture14 {
public static void main(String[] args) {
List<Integer> integers = List.of(85, 86, 87, 88, 89, 90);
Optional<Integer>firstDivisibleBy3 = integers.stream()
.filter(i -> i % 3 == 0).findFirst();
System.out .println(firstDivisibleBy3));
} } // Optional [87]
62
Marius Claassen,
Java for Advanced Users
Lecture 14: Searching exercise
Implement a ‘List’ and the ‘Optional’ class to
find the first square divisible by 5.
63
Marius Claassen,
Java for Advanced Users
Lecture 15: Searching solution
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
64
Marius Claassen,
Java for Advanced Users
Lecture 15: Searching solution
package com.advancedjava; import java.util.List; import
java.util.Optional;
public class Lecture15 {
public static void main(String[] args) {
List<Integer> integers = List.of(3, 5, 7, 9, 11);
Optional<Integer>firstSquareDivBy5 = integers.stream()
.map(i -> i * i).filter(i -> i % 5 == 0).findFirst();
System.out .println(firstSquareDivBy5));
} } // Optional [25]
65
Marius Claassen,
Java for Advanced Users
TOPICS
1. Introduction
2. Java class design
3. Collections
4. Strings
5. Recursion
6. Input / Output
7. Error handling
8. Conclusion
66
Marius Claassen,
Java for Advanced Users
Lecture 16: String example
String processing problem statement:
Implement a ‘List<String>’ to return a stream
of unique letters.
67
Marius Claassen,
Java for Advanced Users
Lecture 16: String example
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
68
Marius Claassen,
Java for Advanced Users
Lecture 16: String example
package com.advancedjava;
import java.util.List; import java.util.stream.Collectors; import
java.util.stream.Stream;
69
Marius Claassen,
Java for Advanced Users
Lecture 16: String example
public class Lecture16 {
public static void main(String[] args) {
List<String> words = List.of(“Java”, “the”, “legend”);
List<String> uniqueLetters = words.stream()
.flatMap(w -> Stream.of (w.split(“”)).distinct() )
.collect(Collectors.toList());
uniqueLetters.forEach(u->System.out .print(u+“ ”)); } }
// J a v t h e l g n d
70
Marius Claassen,
Java for Advanced Users
Lecture 16: String exercise
Implement a ‘List<String>’ to sort words
according to their length.
71
Marius Claassen,
Java for Advanced Users
Lecture 16: String exercise
Implement a ‘List<String>’ to sort words
according to their length.
72
Marius Claassen,
Java for Advanced Users
Lecture 17: String solution
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
73
Marius Claassen,
Java for Advanced Users
Lecture 17: String solution
package com.advancedjava;
import java.util.Comparator; import java.util.List; import
java.util.Collectors; import java.util.stream.Stream;
74
Marius Claassen,
Java for Advanced Users
Lecture 17: String solution
public class Lecture17 {
public static void main(String[] args) {
List<String> words = List.of(“Java”, “the”, “legend”);
List<String> sortedWords = words.stream()
.flatMap(w -> Stream.of (w.split(“ ”))
.sorted(Comparator.comparingInt(String::length)) )
.collect(Collectors.toList());
sortedWords.forEach(w->System.out .print(w+“ ”)); } }
// the Java legend
75
Marius Claassen,
Java for Advanced Users
Lecture 18: Regular expr example
Regular expression problem statement:
Implement the regular expression ‘be’ to
operate on a list of words. Create a single
string, replacing the regular expressions with
a question mark.
76
Marius Claassen,
Java for Advanced Users
Lecture 18: Regular expr example
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
77
Marius Claassen,
Java for Advanced Users
Lecture 18: Regular expr example
package com.advancedjava;
import java.util.List; import java.util.stream.Collectors; import
java.util.stream.Stream;
78
Marius Claassen,
Java for Advanced Users
Lecture 18: Regular expr example
public class Lecture18 {
public static void main(String[] args) {
final String REG_EXPR = “be’’;
List<String> words = List.of(“To be, or not to be: That is the
question:”);
String regExpr = words.stream().flatMap(w ->Stream.of
(w.split(REG_EXPR ))) .collect(Collectors.joining(“?”));
System.out .print(regExpr); } }
// To ?, or not to ?: that is the question:
79
Marius Claassen,
Java for Advanced Users
Lecture 18: Regular expr exercise
Implement the regular expression ‘re’ to
operate on a list of words. Create a single
string, replacing the regular expressions with
a hyphen.
80
Marius Claassen,
Java for Advanced Users
Lecture 19: Regular expr solution
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
81
Marius Claassen,
Java for Advanced Users
Lecture 19: Regular expr solution
package com.advancedjava;
import java.util.List; import java.util.stream.Collectors; import
java.util.stream.Stream;
82
Marius Claassen,
Java for Advanced Users
Lecture 19: Regular expr solution
public class Lecture19 {
public static void main(String[] args) {
final String REG_EXPR = “re’’;
List<String> words = List.of(“There are more things in
heaven and earth, Horatio,”);
String regExpr = words.stream().flatMap(w -> Stream.of
(w.split(REG_EXPR ))) .collect(Collectors.joining(“-”));
System.out .print(regExpr); } }
// The- a- mo- things in heaven and earth, Horatio,
83
Marius Claassen,
Java for Advanced Users
TOPICS
1. Introduction
2. Java class design
3. Collections
4. Strings
5. Recursion
6. Input / Output
7. Error handling
8. Conclusion
84
Marius Claassen,
Java for Advanced Users
Lecture 20: Recursion example
Recursion problem statement:
Implement a recursive method to calculate
the factorial of 5.
85
Marius Claassen,
Java for Advanced Users
Lecture 20: Recursion example
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
86
Marius Claassen,
Java for Advanced Users
Lecture 20: Recursion example
package com.advancedjava;
public class Lecture20 {
public static void main(String[] args) {
long n = 5;
System.out .print(“Factorial of ” + n + “: ” + factorial(n));
}
// Factorial of 5: 120
87
Marius Claassen,
Java for Advanced Users
public static long factorial(long value) {
return factHelper(1, value); }
public static long factHelper(long acc, long num) {
return num == 1 ? acc : factHelper(acc * num, num - 1); }
}
88
Marius Claassen,
Java for Advanced Users
Lecture 20: Recursion exercise
Implement a recursive method to calculate
the factorial of 9.
89
Marius Claassen,
Java for Advanced Users
Lecture 21: Recursion solution
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
90
Marius Claassen,
Java for Advanced Users
Lecture 21: Recursion solution
package com.advancedjava;
public class Lecture21 {
public static void main(String[] args) {
long n = 9;
System.out .print(“Factorial of ” + n + “: ” + factorial(n));
}
// Factorial of 9: 362880
91
Marius Claassen,
Java for Advanced Users
public static long factorial(long value) {
return factHelper(1, value); }
public static long factHelper(long acc, long num) {
return num == 1 ? acc : factHelper(acc * num, num - 1); }
}
92
Marius Claassen,
Java for Advanced Users
TOPICS
1. Introduction
2. Java class design
3. Collections
4. Strings
5. Recursion
6. Input / Output
7. Error handling
8. Conclusion
93
Marius Claassen,
Java for Advanced Users
Lecture 22: Input example
Input problem statement:
Implement a ‘BufferedReader’ to read input
from a text file, and create a list of those
words.
94
Marius Claassen,
Java for Advanced Users
Lecture 22: Input example
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
95
Marius Claassen,
Java for Advanced Users
Lecture 22: Input example
package com.advancedjava;
import java.io.BufferedReader; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Paths; import
java.util.List; import java.util.stream.Collectors;
96
Marius Claassen,
Java for Advanced Users
public class Lecture22 {
public static void main(String[] args) throws IOException {
try (BufferedReader reader = Files.newBufferedReader (
Paths.get(“InputL22.txt”))) {
List<String> words = reader.lines()
.collect(Collectors.toList());
words.stream(forEach(System.out::println) );
}
} }
97
Marius Claassen,
Java for Advanced Users
InputL22.txt
“Love all, trust a few,
Do wrong to none: be able for thine enemy
Rather in power than use, and keep thy friend
Under thy own life’s key: be cheque’d for silence,
But never tax’d for speech.”
98
Marius Claassen,
Java for Advanced Users
// “Love all, trust a few,
// Do wrong to none: be able for thine enemy
// Rather in power than use, and keep thy friend
// Under thy own life’s key: be cheque’d for silence,
// But never tax’d for speech.”
99
Marius Claassen,
Java for Advanced Users
Lecture 22: Input exercise
Implement a ‘BufferedReader’ to read input
from a text file, and create a list of those
words.
100
Marius Claassen,
Java for Advanced Users
Lecture 23: Input solution
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
101
Marius Claassen,
Java for Advanced Users
Lecture 23: Input solution
package com.advancedjava;
import java.io.BufferedReader; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Paths; import
java.util.List; import java.util.stream.Collectors;
102
Marius Claassen,
Java for Advanced Users
public class Lecture23 {
public static void main(String[] args) throws IOException {
try (BufferedReader reader = Files.newBufferedReader (
Paths.get(“InputL23.txt”))) {
List<String> words = reader.lines()
.collect(Collectors.toList());
words.stream(forEach(System.out::println) );
}
} }
103
Marius Claassen,
Java for Advanced Users
InputL23.txt
“Young men’s love then lies
Not truly in their hearts, but in their eyes.”
104
Marius Claassen,
Java for Advanced Users
// “Young men’s love then lies
// Not truly in their hearts, but in their eyes.”
105
Marius Claassen,
Java for Advanced Users
Lecture 24: Output example
Output problem statement:
Implement a ‘BufferedWriter’ for writing to a
text file.
106
Marius Claassen,
Java for Advanced Users
Lecture 24: Output example
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
107
Marius Claassen,
Java for Advanced Users
Lecture 24: Output example
package com.advancedjava;
import java.io.BufferedWriter; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Paths;
108
Marius Claassen,
Java for Advanced Users
public class Lecture24 {
public static void main(String[] args) throws IOException {
try (BufferedWriter writer = Files.newBufferedWriter (
Paths.get(“OutputL24.txt”))) {
writer.write(“n“This above all: to thine own self be true,n”+
“And it must follow, as the night the day, n”+
“Thou canst not then be false to any man.” ”);
} } }
109
Marius Claassen,
Java for Advanced Users
// “This above all: to thine own self be true,
// And it must follow, as the night the day,
// Thou canst not then be false to any man.”
110
Marius Claassen,
Java for Advanced Users
Lecture 24: Output exercise
Implement a ‘BufferedWriter’ for writing to a
text file.
111
Marius Claassen,
Java for Advanced Users
Lecture 25: Output solution
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
112
Marius Claassen,
Java for Advanced Users
Lecture 25: Output solution
package com.advancedjava;
import java.io.BufferedWriter; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Paths;
113
Marius Claassen,
Java for Advanced Users
public class Lecture25 {
public static void main(String[] args) throws IOException {
try (BufferedWriter writer = Files.newBufferedWriter (
Paths.get(“OutputL25.txt”))) {
writer.write(“n“Cowards die many times before their
deaths;n”+
“The valiant never taste of death but once” ”);
}
} }114
Marius Claassen,
Java for Advanced Users
// “Cowards die many times before their deaths;
// The valiant never taste of death but once”
115
Marius Claassen,
Java for Advanced Users
TOPICS
1. Introduction
2. Java class design
3. Collections
4. Strings
5. Recursion
6. Input / Output
7. Error handling
8. Conclusion
116
Marius Claassen,
Java for Advanced Users
Lecture 26: Exceptions example
Exceptions problem statement:
Implement ‘try with resources’ to read from
and handle a ‘NoSuchFileException’.
117
Marius Claassen,
Java for Advanced Users
Lecture 26: Exceptions example
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
118
Marius Claassen,
Java for Advanced Users
Lecture 26: Exceptions example
package com.advancedjava;
import java.io.BufferedReader; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Paths; import
java.util.List; import java.util.stream.Collectors;
119
Marius Claassen,
Java for Advanced Users
public class Lecture26 {
public static void main(String[] args) throws IOException {
try (BufferedReader reader = Files.newBufferedReader (
Paths.get(“InputL2.txt”))) {
List<String> words = reader.lines()
.collect(Collectors.toList());
words.forEach(System.out::println);
}
} }
120
Marius Claassen,
Java for Advanced Users
// java.nio.file.NoSuchFileException
// Java is the number 1 development platform
121
Marius Claassen,
Java for Advanced Users
Lecture 26: Exceptions exercise
Implement ‘try with resources’ to read from
and handle a ‘NoSuchFileException’.
122
Marius Claassen,
Java for Advanced Users
Lecture 27: Exceptions solution
module com.advancedjava {
// requires module
exports com.advancedjava; // package
}
123
Marius Claassen,
Java for Advanced Users
Lecture 27: Exceptions solution
package com.advancedjava;
import java.io.BufferedReader; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Paths; import
java.util.List; import java.util.stream.Collectors;
124
Marius Claassen,
Java for Advanced Users
public class Lecture27 {
public static void main(String[] args) throws IOException {
try (BufferedReader reader = Files.newBufferedReader (
Paths.get(“Input27.txt”))) {
List<String> words = reader.lines()
.collect(Collectors.toList());
words.forEach(System.out::println);
}
} }
125
Marius Claassen,
Java for Advanced Users
// java.nio.file.NoSuchFileException
// There are 21 billion cloud connected virtual machines
126
Marius Claassen,
Java for Advanced Users
Lecture 28: Assertions example
Assertions problem statement:
Implement an ‘assertion’ statement to test for
equality where a list contains only even-
length words converted to capital letters.
127
Marius Claassen,
Java for Advanced Users
Lecture 28: Assertions example
module com.advancedjava {
requires junit; // module
exports com.advancedjava; // package
}
128
Marius Claassen,
Java for Advanced Users
Lecture 28: Assertions example
package com.advancedjava;
import org.junit.Assert; import org.junit.Test;
import java.util.List; import java.util.stream.Collectors;
129
Marius Claassen,
Java for Advanced Users
Lecture 28: Assertions example
public class Lecture28 {
@Test public void evenLengthCapitalWords() {
List<String> input = List.of(“Java”, “the” , “number1”,
“language”);
List<String> result = input.stream().filter(w -> w.length()
% 2 == 0).map(String::toUpperCase)
.collect(Collectors.toList());
Assert.assertEquals(List.of(“JAVA”, “LANGUAGE”),result);
} } // [1 test passed]
130
Marius Claassen,
Java for Advanced Users
Lecture 28: Assertions exercise
Implement an ‘assertion’ to test for equality
of the longest line in a file.
131
Marius Claassen,
Java for Advanced Users
Lecture 29: Assertions solution
module com.advancedjava {
requires junit; // module
exports com.advancedjava; // package
}
132
Marius Claassen,
Java for Advanced Users
Lecture 29: Assertions solution
package com.advancedjava;
import org.junit.After; import org.junit.Assert; import
org.junit.Before; import org.junit.Test;
import java.io.BufferedReader; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Paths; import
java.util.Comparator;
133
Marius Claassen,
Java for Advanced Users
public class Lecture29 {
private BufferedReader = reader;
@Before public void setUpReader() throws IOException {
reader = Files.newBufferedReader (Paths.get(“L29.txt”)); }
@After public void closeReader() throws IOException {
reader.close(); }
134
Marius Claassen,
Java for Advanced Users
@Test public void findLongestLine() throws IOException {
String longest = reader.lines().max(Comparator
.comparingInt(String::length)).orElse(“ ”);
Assert.assertEquals(“the most popular programming
language in use, particularly for client-server web
applications,”, longest);
}
}
// [1 test passed]
135
Marius Claassen,
Java for Advanced Users
L29.txt
Java is a computer programming language that is concurrent, class-based, object-oriented
and specifically designed to have as few implementation dependencies as possible.
It is intended to let application developers "write once, run anywhere" (WORA),
meaning that code that runs on one platform does not need to be recompiled to run on another.
Java applications are typically compiled to bytecode (class file) that can run on any
Java virtual machine (JVM) regardless of computer architecture. Java is, as of 2017,
the most popular programming language in use, particularly for client-server web applications,
with a reported 12 million developers. Java was originally developed by James Gosling at
Sun Microsystems (which has since merged into Oracle Corporation) and released in 1995
as a core component of Sun Microsystems' Java platform. The language derives much
of its syntax from C and C++, but it has fewer low-level facilities than either of them.
136
Marius Claassen,
Java for Advanced Users
TOPICS
1. Introduction
2. Java class design
3. Collections
4. Strings
5. Recursion
6. Input / Output
7. Error handling
8. Conclusion
137
Marius Claassen,
Java for Advanced Users
Lecture 30: Final remarks
138
Marius Claassen,
Java for Advanced Users
To access this course:
• https://www.udemy.com/course/1133522/manage/basics/
or
• mariusclaassen@gmail.com
139
Marius Claassen,
Java for Advanced Users

Java for advanced users

  • 1.
    Java for AdvancedUsers Combine Object-oriented Java with Functional coding Marius Claassen, Java for Advanced Users
  • 2.
    Refine your programmingskills, by using the world’s most popular language to: • Stay ahead of the competition • Be the team leader • Extend the language 2 Marius Claassen, Java for Advanced Users
  • 3.
    About me Marius Claassen,Java Developer and Teacher I taught myself to program using Java. Having been a teacher for many years, I am now working full-time as an independent software instructor, making video tutorials. My passions are learning, teaching and Java in equal measure. It is my mission to help others learn programming in general and Java in particular. 3 Marius Claassen, Java for Advanced Users
  • 4.
    Benefits • Implement advancedconcepts • Develop complex Java applications • Devise Java solutions when given a problem statement 4 Marius Claassen, Java for Advanced Users
  • 5.
    Major components 1. Introduction 2.Java class design 3. Collections 4. Strings 5. Recursion 6. Input / Output 7. Error handling 8. Conclusion 5 Marius Claassen, Java for Advanced Users
  • 6.
    Lecture outline • 30Lectures • 5 minutes 1. Video 2. PDF 3. Coding exercise 6 Marius Claassen, Java for Advanced Users
  • 7.
    Development tools • JDK(SE 9) http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html • IDE (IntelliJ IDEA) https://www.jetbrains.com/idea/download/#section=windows 7 Marius Claassen, Java for Advanced Users
  • 8.
    Ideal student Completed intermediatecourse You want to specialize by: • watching live coding • doing coding exercises • checking answers against solutions 8 Marius Claassen, Java for Advanced Users
  • 9.
    Enrolment • 30-day moneyback guarantee 9 Marius Claassen, Java for Advanced Users
  • 10.
    To access thiscourse: • https://www.udemy.com/course/1133522/manage/basics/ or • mariusclaassen@gmail.com 10 Marius Claassen, Java for Advanced Users
  • 11.
    TOPICS 1. Introduction 2. Javaclass design 3. Collections 4. Strings 5. Recursion 6. Input / Output 7. Error handling 8. Conclusion 11 Marius Claassen, Java for Advanced Users
  • 12.
    Lecture 2: Interfacesexample Interfaces problem statement: Implement an interface, ‘Startable’ to print the strings, ‘Tractor started’ and ‘Dishwasher stopped’ 12 Marius Claassen, Java for Advanced Users
  • 13.
    Lecture 2: Interfacesexample module com.advancedjava { // requires module exports com.advancedjava; // package } 13 Marius Claassen, Java for Advanced Users
  • 14.
    package com.advancedjava; public classLecture2 { public static void main(String[] args) { Tractor tractor = new Tractor(); tractor.start(); System.out.print(“, ”); Startable dishwasher = new Dishwasher(); dishwasher.stop(); } } // Tractor started, Dishwasher stopped 14 Marius Claassen, Java for Advanced Users
  • 15.
    package com.advancedjava; public interfaceStartable { public void start(); public void stop(); } 15 Marius Claassen, Java for Advanced Users
  • 16.
    package com.advancedjava; public classTractor implements Startable { @Override public void start() { System.out.print(“Tractor started”); } @Override public void stop() { System.out.print(“Tractor stopped”); } } 16 Marius Claassen, Java for Advanced Users
  • 17.
    package com.advancedjava; public classDishwasher implements Startable { @Override public void start() { System.out.print(“Dishwasher started”); } @Override public void stop() { System.out.print(“Dishwasher stopped”); } } 17 Marius Claassen, Java for Advanced Users
  • 18.
    Lecture 2: Interfacesexercise Implement an interface, ‘Openable’ to print the strings, ‘Cashregister opened’ and ‘Utility account closed’ 18 Marius Claassen, Java for Advanced Users
  • 19.
    Lecture 3: Interfacessolution module com.advancedjava { // requires module exports com.advancedjava; // package } 19 Marius Claassen, Java for Advanced Users
  • 20.
    package com.advancedjava; public classLecture3 { public static void main(String[] args) { Cashregister cashregister = new Cashregister(); cashregister.open(); System.out.print(“, ”); Openable utilityAccount = new UtilityAccount(); utilityAccount.close(); } } // Cashregister opened, Utility account closed 20 Marius Claassen, Java for Advanced Users
  • 21.
    package com.advancedjava; public interfaceOpenable { public void open(); public void close(); } 21 Marius Claassen, Java for Advanced Users
  • 22.
    package com.advancedjava; public classCashregister implements Openable { @Override public void open() { System.out.print(“Cashregister opened”); } @Override public void close() { System.out.print(“Cashregister closed”); } } 22 Marius Claassen, Java for Advanced Users
  • 23.
    package com.advancedjava; public classUtilityAccount implements Openable { @Override public void open() { System.out.print(“Utility account opened”); } @Override public void close() { System.out.print(“Utility account closed”); } } 23 Marius Claassen, Java for Advanced Users
  • 24.
    Lecture 4: Abstractclass example Abstract classes problem statement: Implement an abstract class, ‘Vehicle’ to print, ‘Car licensed’ and ‘Truck licensed’ 24 Marius Claassen, Java for Advanced Users
  • 25.
    Lecture 4: Abstractclass example module com.advancedjava { // requires module exports com.advancedjava; // package } 25 Marius Claassen, Java for Advanced Users
  • 26.
    package com.advancedjava; public classLecture4 { public static void main(String[] args) { Car car = new Car(); car.licensing(“Car”); Truck truck = new Truck(); truck.licensing(“Truck”); } } // Car licensed, Truck licensed 26 Marius Claassen, Java for Advanced Users
  • 27.
    package com.advancedjava; public abstractclass Vehicle { public abstract void licensing(String type); } 27 Marius Claassen, Java for Advanced Users
  • 28.
    package com.advancedjava; public classCar extends Vehicle { @Override public void licensing(String type) { System.out.print(type + “ licensed, ”); } } 28 Marius Claassen, Java for Advanced Users
  • 29.
    package com.advancedjava; public classTruck extends Vehicle { @Override public void licensing(String type) { System.out.println(type + “ licensed”); } } 29 Marius Claassen, Java for Advanced Users
  • 30.
    Lecture 4: Abstractclass exercise Implement an abstract class, ‘Shape’ to print, ‘Circle diameter 10 metres’ and ‘Rectangle size 15 square metres’ 30 Marius Claassen, Java for Advanced Users
  • 31.
    Lecture 5: Abstractclass solution module com.advancedjava { // requires module exports com.advancedjava; // package } 31 Marius Claassen, Java for Advanced Users
  • 32.
    package com.advancedjava; public classLecture5 { public static void main(String[] args) { Circle circle = new Circle(); circle.resize(10); Rectangle rectangle = new Rectangle(); rectangle.resize(15); } } // Circle diameter 10 metres, Rectangle size 15 square metres 32 Marius Claassen, Java for Advanced Users
  • 33.
    package com.advancedjava; public abstractclass Shape { public abstract void resize(int value); } 33 Marius Claassen, Java for Advanced Users
  • 34.
    package com.advancedjava; public classCircle extends Shape { @Override public void resize(int diameter) { System.out.println(“Circle diameter ”+diameter+“ metres”); } } 34 Marius Claassen, Java for Advanced Users
  • 35.
    package com.advancedjava; public classRectangle extends Shape { @Override public void resize(int size) { System.out.println(“Rectangle size ”+size+“ square metres”); } } 35 Marius Claassen, Java for Advanced Users
  • 36.
    TOPICS 1. Introduction 2. Javaclass design 3. Collections 4. Strings 5. Recursion 6. Input / Output 7. Error handling 8. Conclusion 36 Marius Claassen, Java for Advanced Users
  • 37.
    Lecture 6: Genericsexample Generics problem statement: Implement generics to print the first 3 Hebrew letters as Integer, String pairs. 37 Marius Claassen, Java for Advanced Users
  • 38.
    Lecture 6: Genericsexample module com.advancedjava { // requires module exports com.advancedjava; // package } 38 Marius Claassen, Java for Advanced Users
  • 39.
    package com.advancedjava; public classLecture6 { public static void main(String[] args) { Map<Integer, String> firstLetters = Map.of(1, “Alef”, “ ”, “Bet”, 3, “Gimmel”); firstLetters.forEach( (k,v) -> System.out.println(k+ “ ” +v) ); } } // 1 Alef 2 Bet 3 Gimmel 39 Marius Claassen, Java for Advanced Users
  • 40.
    Lecture 6: Genericsexercise Implement generics to print the world’s largest 3 cities as String, Integer pairs. 40 Marius Claassen, Java for Advanced Users
  • 41.
    package com.advancedjava; public classLecture7 { public static void main(String[] args) { Map<String, Integer> largestCities = Map.of(“Shanghai”, “24256800 ”, “Beijing”, 21516000, “Delhi”, 16787941); firstLetters.forEach( (k,v) -> System.out.println(k+ “ ” +v) ); } } // Shanghai 24356800 Beijing 21516000 Delhi 16787941 41 Marius Claassen, Java for Advanced Users
  • 42.
    Lecture 8: Collections1 example Collections Part 1 problem statement: Implement the ‘List’ collection and the ‘skip()’ to print a subset of numbers. 42 Marius Claassen, Java for Advanced Users
  • 43.
    Lecture 8: Collections1 example module com.advancedjava { // requires module exports com.advancedjava; // package } 43 Marius Claassen, Java for Advanced Users
  • 44.
    package com.advancedjava; importjava.util.List; public class Lecture8 { public static void main(String[] args) { List<Integer> ints = List.of(14, 15, 16, 17, 18, 18, 19, 20); ints.stream().skip(3).forEach(i->System.out.print(i + “ ”) ); } } // 17 18 18 19 20 44 Marius Claassen, Java for Advanced Users
  • 45.
    Lecture 8: Collections1 exercise Implement the ‘List’ collection and the ‘limit()’ to print a subset of words. 45 Marius Claassen, Java for Advanced Users
  • 46.
    Lecture 9: Collections1 solution module com.advancedjava { // requires module exports com.advancedjava; // package } 46 Marius Claassen, Java for Advanced Users
  • 47.
    package com.advancedjava; importjava.util.List; public class Lecture9 { public static void main(String[] args) { List<String> words = List.of(“Java”, ”is”, “number”, ”1”); words.stream().limit(2).forEach(w->System.out.print(w+“ ”)); } } // Java is 47 Marius Claassen, Java for Advanced Users
  • 48.
    Lecture 10: Collections2 example Collections Part 2 problem statement: Implement the ‘Set’ collection to print all the words in a set. 48 Marius Claassen, Java for Advanced Users
  • 49.
    Lecture 10: Collections2 example module com.advancedjava { // requires module exports com.advancedjava; // package } 49 Marius Claassen, Java for Advanced Users
  • 50.
    package com.advancedjava; importjava.util.Set; public class Lecture10 { public static void main(String[] args) { Set<String> metals=Set.of(“gold”, “diamonds”, “platinum”); metals.stream().forEach(m ->System.out.print(m+“ ”)); } } // gold diamonds platinum 50 Marius Claassen, Java for Advanced Users
  • 51.
    Lecture 10: Collections2 exercise Implement the ‘Set’ collection to print all the fractional values in a set. 51 Marius Claassen, Java for Advanced Users
  • 52.
    Lecture 11: Collections2 solution module com.advancedjava { // requires module exports com.advancedjava; // package } 52 Marius Claassen, Java for Advanced Users
  • 53.
    Lecture 11: Collections2 solution package com.advancedjava; import java.util.Set; public class Lecture11 { public static void main(String[] args) { Set<Double> values = List.of(31.5, 32.9, 33.7); values.stream().forEach(v->System.out.print(v+“ ”)); } } // 32.9 33.7 31.5 53 Marius Claassen, Java for Advanced Users
  • 54.
    Lecture 12: Sortingexample Sorting problem statement: Implement the ‘Set’ collection to print characters in their natural order. 54 Marius Claassen, Java for Advanced Users
  • 55.
    Lecture 12: Sortingexample module com.advancedjava { // requires module exports com.advancedjava; // package } 55 Marius Claassen, Java for Advanced Users
  • 56.
    Lecture 12: Sortingexample package com.advancedjava; import java.util.Set; public class Lecture12 { public static void main(String[] args) { Set<Character> chars=Set.of( ‘%’, ‘#’, ‘&’, ‘$’, ‘!’, ‘ " ’); chars.stream().sorted().forEach(c->System.out.print(c+“ ”)); } } // ! " # $ % & 56 Marius Claassen, Java for Advanced Users
  • 57.
    Lecture 12: Sortingexercise Implement the ‘List’ collection to print weekdays in their natural order. 57 Marius Claassen, Java for Advanced Users
  • 58.
    Lecture 13: Sortingsolution module com.advancedjava { // requires module exports com.advancedjava; // package } 58 Marius Claassen, Java for Advanced Users
  • 59.
    Lecture 13: Sortingsolution package com.advancedjava; import java.time.DayOfWeek; import java.util.List; public class Lecture13 { public static void main(String[] args) { List<DayOfWeek> days = List.of(DayOfWeek.WEDNESDAY, DayOfWeek.SATURDAY , DayOfWeek.MONDAY ); days.stream().sorted().forEach(d->System.out.print(d+“ ”)); } } // MONDAY WEDNESDAY SATURDAY 59 Marius Claassen, Java for Advanced Users
  • 60.
    Lecture 14: Searchingexample Searching problem statement: Implement a ‘List’ and the ‘Optional’ class to find the first integer divisible by 3. 60 Marius Claassen, Java for Advanced Users
  • 61.
    Lecture 14: Searchingexample module com.advancedjava { // requires module exports com.advancedjava; // package } 61 Marius Claassen, Java for Advanced Users
  • 62.
    Lecture 14: Searchingexample package com.advancedjava; import java.util.List; import java.util.Optional; public class Lecture14 { public static void main(String[] args) { List<Integer> integers = List.of(85, 86, 87, 88, 89, 90); Optional<Integer>firstDivisibleBy3 = integers.stream() .filter(i -> i % 3 == 0).findFirst(); System.out .println(firstDivisibleBy3)); } } // Optional [87] 62 Marius Claassen, Java for Advanced Users
  • 63.
    Lecture 14: Searchingexercise Implement a ‘List’ and the ‘Optional’ class to find the first square divisible by 5. 63 Marius Claassen, Java for Advanced Users
  • 64.
    Lecture 15: Searchingsolution module com.advancedjava { // requires module exports com.advancedjava; // package } 64 Marius Claassen, Java for Advanced Users
  • 65.
    Lecture 15: Searchingsolution package com.advancedjava; import java.util.List; import java.util.Optional; public class Lecture15 { public static void main(String[] args) { List<Integer> integers = List.of(3, 5, 7, 9, 11); Optional<Integer>firstSquareDivBy5 = integers.stream() .map(i -> i * i).filter(i -> i % 5 == 0).findFirst(); System.out .println(firstSquareDivBy5)); } } // Optional [25] 65 Marius Claassen, Java for Advanced Users
  • 66.
    TOPICS 1. Introduction 2. Javaclass design 3. Collections 4. Strings 5. Recursion 6. Input / Output 7. Error handling 8. Conclusion 66 Marius Claassen, Java for Advanced Users
  • 67.
    Lecture 16: Stringexample String processing problem statement: Implement a ‘List<String>’ to return a stream of unique letters. 67 Marius Claassen, Java for Advanced Users
  • 68.
    Lecture 16: Stringexample module com.advancedjava { // requires module exports com.advancedjava; // package } 68 Marius Claassen, Java for Advanced Users
  • 69.
    Lecture 16: Stringexample package com.advancedjava; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; 69 Marius Claassen, Java for Advanced Users
  • 70.
    Lecture 16: Stringexample public class Lecture16 { public static void main(String[] args) { List<String> words = List.of(“Java”, “the”, “legend”); List<String> uniqueLetters = words.stream() .flatMap(w -> Stream.of (w.split(“”)).distinct() ) .collect(Collectors.toList()); uniqueLetters.forEach(u->System.out .print(u+“ ”)); } } // J a v t h e l g n d 70 Marius Claassen, Java for Advanced Users
  • 71.
    Lecture 16: Stringexercise Implement a ‘List<String>’ to sort words according to their length. 71 Marius Claassen, Java for Advanced Users
  • 72.
    Lecture 16: Stringexercise Implement a ‘List<String>’ to sort words according to their length. 72 Marius Claassen, Java for Advanced Users
  • 73.
    Lecture 17: Stringsolution module com.advancedjava { // requires module exports com.advancedjava; // package } 73 Marius Claassen, Java for Advanced Users
  • 74.
    Lecture 17: Stringsolution package com.advancedjava; import java.util.Comparator; import java.util.List; import java.util.Collectors; import java.util.stream.Stream; 74 Marius Claassen, Java for Advanced Users
  • 75.
    Lecture 17: Stringsolution public class Lecture17 { public static void main(String[] args) { List<String> words = List.of(“Java”, “the”, “legend”); List<String> sortedWords = words.stream() .flatMap(w -> Stream.of (w.split(“ ”)) .sorted(Comparator.comparingInt(String::length)) ) .collect(Collectors.toList()); sortedWords.forEach(w->System.out .print(w+“ ”)); } } // the Java legend 75 Marius Claassen, Java for Advanced Users
  • 76.
    Lecture 18: Regularexpr example Regular expression problem statement: Implement the regular expression ‘be’ to operate on a list of words. Create a single string, replacing the regular expressions with a question mark. 76 Marius Claassen, Java for Advanced Users
  • 77.
    Lecture 18: Regularexpr example module com.advancedjava { // requires module exports com.advancedjava; // package } 77 Marius Claassen, Java for Advanced Users
  • 78.
    Lecture 18: Regularexpr example package com.advancedjava; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; 78 Marius Claassen, Java for Advanced Users
  • 79.
    Lecture 18: Regularexpr example public class Lecture18 { public static void main(String[] args) { final String REG_EXPR = “be’’; List<String> words = List.of(“To be, or not to be: That is the question:”); String regExpr = words.stream().flatMap(w ->Stream.of (w.split(REG_EXPR ))) .collect(Collectors.joining(“?”)); System.out .print(regExpr); } } // To ?, or not to ?: that is the question: 79 Marius Claassen, Java for Advanced Users
  • 80.
    Lecture 18: Regularexpr exercise Implement the regular expression ‘re’ to operate on a list of words. Create a single string, replacing the regular expressions with a hyphen. 80 Marius Claassen, Java for Advanced Users
  • 81.
    Lecture 19: Regularexpr solution module com.advancedjava { // requires module exports com.advancedjava; // package } 81 Marius Claassen, Java for Advanced Users
  • 82.
    Lecture 19: Regularexpr solution package com.advancedjava; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; 82 Marius Claassen, Java for Advanced Users
  • 83.
    Lecture 19: Regularexpr solution public class Lecture19 { public static void main(String[] args) { final String REG_EXPR = “re’’; List<String> words = List.of(“There are more things in heaven and earth, Horatio,”); String regExpr = words.stream().flatMap(w -> Stream.of (w.split(REG_EXPR ))) .collect(Collectors.joining(“-”)); System.out .print(regExpr); } } // The- a- mo- things in heaven and earth, Horatio, 83 Marius Claassen, Java for Advanced Users
  • 84.
    TOPICS 1. Introduction 2. Javaclass design 3. Collections 4. Strings 5. Recursion 6. Input / Output 7. Error handling 8. Conclusion 84 Marius Claassen, Java for Advanced Users
  • 85.
    Lecture 20: Recursionexample Recursion problem statement: Implement a recursive method to calculate the factorial of 5. 85 Marius Claassen, Java for Advanced Users
  • 86.
    Lecture 20: Recursionexample module com.advancedjava { // requires module exports com.advancedjava; // package } 86 Marius Claassen, Java for Advanced Users
  • 87.
    Lecture 20: Recursionexample package com.advancedjava; public class Lecture20 { public static void main(String[] args) { long n = 5; System.out .print(“Factorial of ” + n + “: ” + factorial(n)); } // Factorial of 5: 120 87 Marius Claassen, Java for Advanced Users
  • 88.
    public static longfactorial(long value) { return factHelper(1, value); } public static long factHelper(long acc, long num) { return num == 1 ? acc : factHelper(acc * num, num - 1); } } 88 Marius Claassen, Java for Advanced Users
  • 89.
    Lecture 20: Recursionexercise Implement a recursive method to calculate the factorial of 9. 89 Marius Claassen, Java for Advanced Users
  • 90.
    Lecture 21: Recursionsolution module com.advancedjava { // requires module exports com.advancedjava; // package } 90 Marius Claassen, Java for Advanced Users
  • 91.
    Lecture 21: Recursionsolution package com.advancedjava; public class Lecture21 { public static void main(String[] args) { long n = 9; System.out .print(“Factorial of ” + n + “: ” + factorial(n)); } // Factorial of 9: 362880 91 Marius Claassen, Java for Advanced Users
  • 92.
    public static longfactorial(long value) { return factHelper(1, value); } public static long factHelper(long acc, long num) { return num == 1 ? acc : factHelper(acc * num, num - 1); } } 92 Marius Claassen, Java for Advanced Users
  • 93.
    TOPICS 1. Introduction 2. Javaclass design 3. Collections 4. Strings 5. Recursion 6. Input / Output 7. Error handling 8. Conclusion 93 Marius Claassen, Java for Advanced Users
  • 94.
    Lecture 22: Inputexample Input problem statement: Implement a ‘BufferedReader’ to read input from a text file, and create a list of those words. 94 Marius Claassen, Java for Advanced Users
  • 95.
    Lecture 22: Inputexample module com.advancedjava { // requires module exports com.advancedjava; // package } 95 Marius Claassen, Java for Advanced Users
  • 96.
    Lecture 22: Inputexample package com.advancedjava; import java.io.BufferedReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; import java.util.stream.Collectors; 96 Marius Claassen, Java for Advanced Users
  • 97.
    public class Lecture22{ public static void main(String[] args) throws IOException { try (BufferedReader reader = Files.newBufferedReader ( Paths.get(“InputL22.txt”))) { List<String> words = reader.lines() .collect(Collectors.toList()); words.stream(forEach(System.out::println) ); } } } 97 Marius Claassen, Java for Advanced Users
  • 98.
    InputL22.txt “Love all, trusta few, Do wrong to none: be able for thine enemy Rather in power than use, and keep thy friend Under thy own life’s key: be cheque’d for silence, But never tax’d for speech.” 98 Marius Claassen, Java for Advanced Users
  • 99.
    // “Love all,trust a few, // Do wrong to none: be able for thine enemy // Rather in power than use, and keep thy friend // Under thy own life’s key: be cheque’d for silence, // But never tax’d for speech.” 99 Marius Claassen, Java for Advanced Users
  • 100.
    Lecture 22: Inputexercise Implement a ‘BufferedReader’ to read input from a text file, and create a list of those words. 100 Marius Claassen, Java for Advanced Users
  • 101.
    Lecture 23: Inputsolution module com.advancedjava { // requires module exports com.advancedjava; // package } 101 Marius Claassen, Java for Advanced Users
  • 102.
    Lecture 23: Inputsolution package com.advancedjava; import java.io.BufferedReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; import java.util.stream.Collectors; 102 Marius Claassen, Java for Advanced Users
  • 103.
    public class Lecture23{ public static void main(String[] args) throws IOException { try (BufferedReader reader = Files.newBufferedReader ( Paths.get(“InputL23.txt”))) { List<String> words = reader.lines() .collect(Collectors.toList()); words.stream(forEach(System.out::println) ); } } } 103 Marius Claassen, Java for Advanced Users
  • 104.
    InputL23.txt “Young men’s lovethen lies Not truly in their hearts, but in their eyes.” 104 Marius Claassen, Java for Advanced Users
  • 105.
    // “Young men’slove then lies // Not truly in their hearts, but in their eyes.” 105 Marius Claassen, Java for Advanced Users
  • 106.
    Lecture 24: Outputexample Output problem statement: Implement a ‘BufferedWriter’ for writing to a text file. 106 Marius Claassen, Java for Advanced Users
  • 107.
    Lecture 24: Outputexample module com.advancedjava { // requires module exports com.advancedjava; // package } 107 Marius Claassen, Java for Advanced Users
  • 108.
    Lecture 24: Outputexample package com.advancedjava; import java.io.BufferedWriter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; 108 Marius Claassen, Java for Advanced Users
  • 109.
    public class Lecture24{ public static void main(String[] args) throws IOException { try (BufferedWriter writer = Files.newBufferedWriter ( Paths.get(“OutputL24.txt”))) { writer.write(“n“This above all: to thine own self be true,n”+ “And it must follow, as the night the day, n”+ “Thou canst not then be false to any man.” ”); } } } 109 Marius Claassen, Java for Advanced Users
  • 110.
    // “This aboveall: to thine own self be true, // And it must follow, as the night the day, // Thou canst not then be false to any man.” 110 Marius Claassen, Java for Advanced Users
  • 111.
    Lecture 24: Outputexercise Implement a ‘BufferedWriter’ for writing to a text file. 111 Marius Claassen, Java for Advanced Users
  • 112.
    Lecture 25: Outputsolution module com.advancedjava { // requires module exports com.advancedjava; // package } 112 Marius Claassen, Java for Advanced Users
  • 113.
    Lecture 25: Outputsolution package com.advancedjava; import java.io.BufferedWriter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; 113 Marius Claassen, Java for Advanced Users
  • 114.
    public class Lecture25{ public static void main(String[] args) throws IOException { try (BufferedWriter writer = Files.newBufferedWriter ( Paths.get(“OutputL25.txt”))) { writer.write(“n“Cowards die many times before their deaths;n”+ “The valiant never taste of death but once” ”); } } }114 Marius Claassen, Java for Advanced Users
  • 115.
    // “Cowards diemany times before their deaths; // The valiant never taste of death but once” 115 Marius Claassen, Java for Advanced Users
  • 116.
    TOPICS 1. Introduction 2. Javaclass design 3. Collections 4. Strings 5. Recursion 6. Input / Output 7. Error handling 8. Conclusion 116 Marius Claassen, Java for Advanced Users
  • 117.
    Lecture 26: Exceptionsexample Exceptions problem statement: Implement ‘try with resources’ to read from and handle a ‘NoSuchFileException’. 117 Marius Claassen, Java for Advanced Users
  • 118.
    Lecture 26: Exceptionsexample module com.advancedjava { // requires module exports com.advancedjava; // package } 118 Marius Claassen, Java for Advanced Users
  • 119.
    Lecture 26: Exceptionsexample package com.advancedjava; import java.io.BufferedReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; import java.util.stream.Collectors; 119 Marius Claassen, Java for Advanced Users
  • 120.
    public class Lecture26{ public static void main(String[] args) throws IOException { try (BufferedReader reader = Files.newBufferedReader ( Paths.get(“InputL2.txt”))) { List<String> words = reader.lines() .collect(Collectors.toList()); words.forEach(System.out::println); } } } 120 Marius Claassen, Java for Advanced Users
  • 121.
    // java.nio.file.NoSuchFileException // Javais the number 1 development platform 121 Marius Claassen, Java for Advanced Users
  • 122.
    Lecture 26: Exceptionsexercise Implement ‘try with resources’ to read from and handle a ‘NoSuchFileException’. 122 Marius Claassen, Java for Advanced Users
  • 123.
    Lecture 27: Exceptionssolution module com.advancedjava { // requires module exports com.advancedjava; // package } 123 Marius Claassen, Java for Advanced Users
  • 124.
    Lecture 27: Exceptionssolution package com.advancedjava; import java.io.BufferedReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; import java.util.stream.Collectors; 124 Marius Claassen, Java for Advanced Users
  • 125.
    public class Lecture27{ public static void main(String[] args) throws IOException { try (BufferedReader reader = Files.newBufferedReader ( Paths.get(“Input27.txt”))) { List<String> words = reader.lines() .collect(Collectors.toList()); words.forEach(System.out::println); } } } 125 Marius Claassen, Java for Advanced Users
  • 126.
    // java.nio.file.NoSuchFileException // Thereare 21 billion cloud connected virtual machines 126 Marius Claassen, Java for Advanced Users
  • 127.
    Lecture 28: Assertionsexample Assertions problem statement: Implement an ‘assertion’ statement to test for equality where a list contains only even- length words converted to capital letters. 127 Marius Claassen, Java for Advanced Users
  • 128.
    Lecture 28: Assertionsexample module com.advancedjava { requires junit; // module exports com.advancedjava; // package } 128 Marius Claassen, Java for Advanced Users
  • 129.
    Lecture 28: Assertionsexample package com.advancedjava; import org.junit.Assert; import org.junit.Test; import java.util.List; import java.util.stream.Collectors; 129 Marius Claassen, Java for Advanced Users
  • 130.
    Lecture 28: Assertionsexample public class Lecture28 { @Test public void evenLengthCapitalWords() { List<String> input = List.of(“Java”, “the” , “number1”, “language”); List<String> result = input.stream().filter(w -> w.length() % 2 == 0).map(String::toUpperCase) .collect(Collectors.toList()); Assert.assertEquals(List.of(“JAVA”, “LANGUAGE”),result); } } // [1 test passed] 130 Marius Claassen, Java for Advanced Users
  • 131.
    Lecture 28: Assertionsexercise Implement an ‘assertion’ to test for equality of the longest line in a file. 131 Marius Claassen, Java for Advanced Users
  • 132.
    Lecture 29: Assertionssolution module com.advancedjava { requires junit; // module exports com.advancedjava; // package } 132 Marius Claassen, Java for Advanced Users
  • 133.
    Lecture 29: Assertionssolution package com.advancedjava; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.io.BufferedReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Comparator; 133 Marius Claassen, Java for Advanced Users
  • 134.
    public class Lecture29{ private BufferedReader = reader; @Before public void setUpReader() throws IOException { reader = Files.newBufferedReader (Paths.get(“L29.txt”)); } @After public void closeReader() throws IOException { reader.close(); } 134 Marius Claassen, Java for Advanced Users
  • 135.
    @Test public voidfindLongestLine() throws IOException { String longest = reader.lines().max(Comparator .comparingInt(String::length)).orElse(“ ”); Assert.assertEquals(“the most popular programming language in use, particularly for client-server web applications,”, longest); } } // [1 test passed] 135 Marius Claassen, Java for Advanced Users
  • 136.
    L29.txt Java is acomputer programming language that is concurrent, class-based, object-oriented and specifically designed to have as few implementation dependencies as possible. It is intended to let application developers "write once, run anywhere" (WORA), meaning that code that runs on one platform does not need to be recompiled to run on another. Java applications are typically compiled to bytecode (class file) that can run on any Java virtual machine (JVM) regardless of computer architecture. Java is, as of 2017, the most popular programming language in use, particularly for client-server web applications, with a reported 12 million developers. Java was originally developed by James Gosling at Sun Microsystems (which has since merged into Oracle Corporation) and released in 1995 as a core component of Sun Microsystems' Java platform. The language derives much of its syntax from C and C++, but it has fewer low-level facilities than either of them. 136 Marius Claassen, Java for Advanced Users
  • 137.
    TOPICS 1. Introduction 2. Javaclass design 3. Collections 4. Strings 5. Recursion 6. Input / Output 7. Error handling 8. Conclusion 137 Marius Claassen, Java for Advanced Users
  • 138.
    Lecture 30: Finalremarks 138 Marius Claassen, Java for Advanced Users
  • 139.
    To access thiscourse: • https://www.udemy.com/course/1133522/manage/basics/ or • mariusclaassen@gmail.com 139 Marius Claassen, Java for Advanced Users