Slide 1

Slide 1 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky 1 Java Idioms Jeanne Boyarsky Wednesday June 21, 2023 KCDC speakerdeck.com/boyarsky

Slide 2

Slide 2 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky About Me • Java Champion • Author • Developer at NYC bank for 21+ years • FIRST Robotics Mentor 2

Slide 3

Slide 3 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Pause for a Commercial 3 Java certs: 8/11/17 Book giveaway at end!

Slide 4

Slide 4 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Disclaimer • A bit of the material is from my books. • Some of the material in this presentation may appear in our upcoming certification books. 4

Slide 5

Slide 5 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Introductions 5

Slide 6

Slide 6 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Agenda • Strings and Text Blocks • Regular Expressions • Collections & Streams • File I/O + Other Useful APIs 6

Slide 7

Slide 7 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Module Flow •Review lab from previous module •Lecture/review •Hands on exercises •10 minute break This means if a colleague needs to call you, the last 15-20 minutes of each hour is best. 7

Slide 8

Slide 8 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Idiom • Recurring construct • Has meaning • Common approach 8

Slide 9

Slide 9 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Design Patterns • Typically higher level • May be language agnostic 9

Slide 10

Slide 10 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Anti-Pattern • Common “solution” • Negative effects 10

Slide 11

Slide 11 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Example #1 - What is it? 11 Design Pattern (Singleton)

Slide 12

Slide 12 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Example #2 - What is it? 12 Idiom (Pre-Java 8)

Slide 13

Slide 13 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Example #3 - What is it? 13 Anti-pattern * catches “Exception” * ignores exception

Slide 14

Slide 14 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Example #4 - What is it? 14

Slide 15

Slide 15 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Agenda • Strings and Text Blocks • Regular Expressions • Collections & Streams • File I/O + Other Useful APIs 15

Slide 16

Slide 16 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Is there a match? 16 IntelliJ warning!

Slide 17

Slide 17 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky 17 Is there a match?

Slide 18

Slide 18 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Only whitespace 18

Slide 19

Slide 19 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Even Better 19 Java 11 Java 11

Slide 20

Slide 20 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky String Concatentation 20 Best choice changes over time

Slide 21

Slide 21 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Equal? 21

Slide 22

Slide 22 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Case Insensitive Equal 22

Slide 23

Slide 23 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Case Insensitive Compare 23

Slide 24

Slide 24 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Creating Csv 24 Better to use Commons CSV Library

Slide 25

Slide 25 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Multiples 25 Java 11

Slide 26

Slide 26 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Formatting • %s - string • %d - int • %f - float/double (minimum width/precision) • %n - new line

Slide 27

Slide 27 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Formatting Java 15

Slide 28

Slide 28 text

@jeanneboyarsky Text Blocks 28 Java 15 (adds line breaks)

Slide 29

Slide 29 text

@jeanneboyarsky Text Blocks 29 incidental whitespace essential whitespace no trailing new line quote not escaped

Slide 30

Slide 30 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Other “new” APIs API Introduced stripLeading() stripTrailing() lines() 11 indent(number) 12 transform(function) 12 stripIndent() translateEscapes() 15 indexOf(ch, beginIndex, endIndex) indexOf(str, beginIndex, endIndex) 21 splitWithDelimiters(regex, limit) 21

Slide 31

Slide 31 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Review - What best API? • Check if String empty? • Duplicate String? • Merge Strings? • Compare case sensitive strings? • Compare non-case sensitive strings? 31

Slide 32

Slide 32 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Lab 32 Do NOT use streams or lambdas in this lab

Slide 33

Slide 33 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Lab & Break 33 https://github.com/boyarsky/ 2023-kcdc-java-idioms

Slide 34

Slide 34 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Agenda • Strings and Text Blocks • Regular Expressions • Collections & Streams • File I/O + Other Useful APIs 34

Slide 35

Slide 35 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Lab Review • Any questions? • How did you solve Tic Tac Toe? 35

Slide 36

Slide 36 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Remove all Numbers 36 Note replaceAll What are two ways to remove blank spaces too?

Slide 37

Slide 37 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Remove leading pattern 37 Three changes: replaceFirst() ^ +

Slide 38

Slide 38 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Remove trailing pattern 38 Watch escaping

Slide 39

Slide 39 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Remove middle 39 Off by one error?

Slide 40

Slide 40 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Ugly regex 40

Slide 41

Slide 41 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Better regex 41

Slide 42

Slide 42 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Regex quick reference 42 0 or more * 1 or more + 0 or 1 ? any . three x’s x{3} range [0-9] Not in range [^0-9] Digit \d White space \s Word \w

Slide 43

Slide 43 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Brainstorm 43 How many ways can we match one or more using at most 2 x characters?

Slide 44

Slide 44 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Splitting on a Regex 44

Slide 45

Slide 45 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Contains only digits 45

Slide 46

Slide 46 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Contains any digits 46 More to regex

Slide 47

Slide 47 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Case Insensitive 47

Slide 48

Slide 48 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Case Insensitive 48

Slide 49

Slide 49 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Multi Line Replace 49 (?m) Also $1 a b c

Slide 50

Slide 50 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Dot All 50 (?s)

Slide 51

Slide 51 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Pattern Idiom 51

Slide 52

Slide 52 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Pattern Replace 52

Slide 53

Slide 53 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Review - How do I? • Match digit? • Remove a single match? • Treat dot as any character? • Match a character 100 times? • Loop through matches? • Match a period? 53

Slide 54

Slide 54 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Lab & Break 54 https://github.com/boyarsky/ 2023-kcdc-java-idioms

Slide 55

Slide 55 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Agenda • Strings and Text Blocks • Regular Expressions • Collections & Streams • File I/O + Other Useful APIs 55

Slide 56

Slide 56 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Lab Review • Any questions? • Did you like replaceAll() or Pattern better? • What was hardest? 56

Slide 57

Slide 57 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Create a Set 57 Java 9

Slide 58

Slide 58 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Create a List 58 Java 9

Slide 59

Slide 59 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Mutable List 59 Java 9

Slide 60

Slide 60 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Mutable Copy 60

Slide 61

Slide 61 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Immutable Copy 61 Java 10

Slide 62

Slide 62 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Synchronized View 62

Slide 63

Slide 63 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Unmodifiable View 63

Slide 64

Slide 64 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Create a Map 64

Slide 65

Slide 65 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Create a Map 65 Java 9

Slide 66

Slide 66 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Sorting 66

Slide 67

Slide 67 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Sorting 67

Slide 68

Slide 68 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Removing from a List 68

Slide 69

Slide 69 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Element in List 69

Slide 70

Slide 70 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Replacing 70

Slide 71

Slide 71 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Venn Diagram? 71

Slide 72

Slide 72 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Defaulting 72

Slide 73

Slide 73 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Add to map if not present 73

Slide 74

Slide 74 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Other Useful Map Methods • containsKey(), containsValue() • entrySet() • keySet(), values() • remove(key) • remove(key, value) • replace(key, value) • replace(key, oldValue, newValue) 74

Slide 75

Slide 75 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Printing 75

Slide 76

Slide 76 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Review - How do I? • Create an immutable copy • Remove all values less than 5 • Update the value in a map if the current value is 10 • Return 0 if the value isn’t found • Find the intersection of two collections 76

Slide 77

Slide 77 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Find max 77

Slide 78

Slide 78 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Join a String 78

Slide 79

Slide 79 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Get First Elements 79 Java 9 and 16

Slide 80

Slide 80 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Get element 80 Java 9

Slide 81

Slide 81 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Strings 81

Slide 82

Slide 82 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Useful Terminal Operations • count() • collect() - more on this next module • allMatch(), anyMatch(), noneMatch() • findFirst(), findAny() • min()/max() • forEach() • toArray, toList() 82

Slide 83

Slide 83 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Useful Intermediate Operations • filter() • map() • distinct() • limit(), skip() • sorted() • peek() 83

Slide 84

Slide 84 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Review - What method can… • Return whether 5/5 values == 7? • Return whether >=1 values == 7? • Make a stream smaller? • Change the order of stream elements? • Loop through stream elements? • Ignore the first 2 elements? • Ignore any elements are the first 2? 84

Slide 85

Slide 85 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Infinite: Generating 85

Slide 86

Slide 86 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Infinite: Iterative 86 Java 9

Slide 87

Slide 87 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky FlatMap 87

Slide 88

Slide 88 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Creating Map 88

Slide 89

Slide 89 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Creating Map With Conflict 89

Slide 90

Slide 90 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Grouping By Key 90

Slide 91

Slide 91 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Partitioning By Key 91

Slide 92

Slide 92 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Grouping By Key 92

Slide 93

Slide 93 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Reduce 93

Slide 94

Slide 94 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Review • Sources • generate() • iterate() • Intermediate • flatMap() • Terminal • reduce() • Collectors • toMap() • groupingBy() • partitioningBy() 94

Slide 95

Slide 95 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky What method for? • Creating an infinite stream of a times table? • Creating a Map that always has two keys? • Creating a Map with a custom key/ value? • Returning an Optional representing the stream? 95

Slide 96

Slide 96 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Lab & Break 96 https://github.com/boyarsky/ 2023-kcdc-java-idioms

Slide 97

Slide 97 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Agenda • Strings and Text Blocks • Regular Expressions • Collections & Streams • File I/O + Other Useful APIs 97

Slide 98

Slide 98 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Lab Review • How did you feel about longer streams? • Did you see how different methods are useful for different problems? 98

Slide 99

Slide 99 text

@jeanneboyarsky Records 99 Java 16 Ran out of room on the screen

Slide 100

Slide 100 text

@jeanneboyarsky Records 100 Automatically get * final record * private final instance variables * public accessors * constructor taking both fields * equals * hashCode Can @Override any methods (ex: backward compatibility for getters)

Slide 101

Slide 101 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Creating a Path 101

Slide 102

Slide 102 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Absolute Path 102

Slide 103

Slide 103 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Separators 103 Windows: \\ and ; Mac/Linux: / and :

Slide 104

Slide 104 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Read File into String 104 Java 11

Slide 105

Slide 105 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Read File into List 105

Slide 106

Slide 106 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Read File with Stream 106

Slide 107

Slide 107 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Write File from String 107 Java 11

Slide 108

Slide 108 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Write File from List 108

Slide 109

Slide 109 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Append To File 109

Slide 110

Slide 110 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Walk Tree 110

Slide 111

Slide 111 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Convert to unchecked 111 Or unchecked wrapper

Slide 112

Slide 112 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Delete File 112

Slide 113

Slide 113 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky What API to? • Read file into a single string? • Write a List to a file? • Get rid of a file? • List all files in directory? • Add to a file? • Process file as a Stream? 113

Slide 114

Slide 114 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Math 114

Slide 115

Slide 115 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Math 115

Slide 116

Slide 116 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Random 116

Slide 117

Slide 117 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Random 117

Slide 118

Slide 118 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Random 118

Slide 119

Slide 119 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Random 119

Slide 120

Slide 120 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky LocalDate 120

Slide 121

Slide 121 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky LocalDate 121

Slide 122

Slide 122 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky What API to? • Get today? • Get July 4th of this year? • Create a random number between 2 and 10? • Get the largest value of two? • Get a unique id? 122

Slide 123

Slide 123 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Win a book 123

Slide 124

Slide 124 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky

Slide 125

Slide 125 text

twitter.com/jeanneboyarsky mastodon.social/@jeanneboyarsky Lab & Break 125 https://github.com/boyarsky/ 2023-kcdc-java-idioms