SlideShare a Scribd company logo
1 of 42
Collections and Queries
Associative Arrays, Lambda and Stream API
Software University
http://softuni.bg
SoftUni Team
Technical Trainers
sli.do
#fund-java
Questions?
2
Table of Contents
1. Associative Arrays
 HashMap <key, value>
 LinkedHashMap <key, value>
 TreeMap <key, value>
2. Lambda
3. Stream API
 Filtering
 Mapping
 Ordering
Associative Arrays
Collection of Key and Value Pairs
 Associative arrays are arrays indexed by keys
 Not by the numbers 0, 1, 2, … (like arrays)
 Hold a set of pairs {key  value}
Associative Arrays (Maps)
5
John Smith +1-555-8976
Lisa Smith +1-555-1234
Sam Doe +1-555-5030
Key Value
Collections of Key and Value Pairs
 HashMap<K, V>
 Keys are unique
 Uses a hash-table + list
 LinkedHashMap<K, V>
 Keys are unique
 Keeps the keys in order of addition
 TreeMap<K, V>
 Keys are unique
 Keeps its keys always sorted
 Uses a balanced search tree
6
 put(key, value) method
 remove(key) method
HashMap<String, Integer> airplanes = new HashMap<>();
airplanes.put("Boeing 737", 130);
airplanes.put("Airbus A320", 150);
Built-In Methods
7
HashMap<String, Integer> airplanes = new HashMap<>();
airplanes.put("Boeing 737", 130);
airplanes.remove("Boeing 737");
 containsKey(key)
 containsValue(value)
HashMap<String, Integer> map = new HashMap<>();
map.put("Airbus A320", 150);
if (map.containsKey("Airbus A320"))
System.out.println("Airbus A320 key exists");
Built-In methods (2)
8
HashMap<String, Integer> map = new HashMap<>();
map.put("Airbus A320", 150);
System.out.println(map.containsValue(150)); //true
System.out.println(map.containsValue(100)); //false
HashMap: put()
9
HashMap<String, String>
Key Value
Hash Function
Pesho 0881-123-987
Gosho 0881-123-789
Alice 0881-123-978
HashMap: remove()
10
HashMap<String, String>
Key Value
Pesho Pesho
Gosho
0881-123-987
0881-123-789
Alice 0881-123-978Hash Function
Pesho 0881-123-987
TreeMap<K, V> – Example
11
TreeMap
<String, String>
Key Value
Alice +359-899-55-592
Comparator
Function
 Iterate through objects of type Map.Entry<K, V>
 Cannot modify the collection (read-only)
Map<String, Double> fruits = new LinkedHashMap<>();
fruits.put("banana", 2.20);
fruits.put("kiwi", 4.50);
for (Map.Entry<K, V> entry : fruits.entrySet()) {
System.out.printf("%s -> %.2f%n",
entry.getKey(), entry.getValue());
}
Iterating Through Map
12
entry.getKey() -> fruit name
entry.getValue() -> fruit price
 Read a list of real numbers and print them in ascending order
along with their number of occurrences
Problem: Count Real Numbers
13
8 2 2 8 2
2 -> 3
8 -> 2
1 5 1 3
1 -> 2
3 -> 1
5 -> 1
Check your solution here: https://judge.softuni.bg/Contests/1311/
Solution: Count Real Numbers
14
double[] nums = Arrays.stream(sc.nextLine().split(" "))
.mapToDouble(Double::parseDouble).toArray();
Map<Double, Integer> counts = new TreeMap<>();
for (double num : nums) {
if (!counts.containsKey(num))
counts.put(num, 0);
counts.put(num, counts.get(num) + 1);
}
for (Map.Entry<Double, Integer> entry : counts.entrySet()) {
DecimalFormat df = new DecimalFormat("#.#######");
System.out.printf("%s -> %d%n", df.format(entry.getKey()), entry.getValue());
}
Overwrite
the value
Check your solution here: https://judge.softuni.bg/Contests/1311/
 Read 2 * N lines of pairs word and synonym
 Each word may have many synonyms
Problem: Words Synonyms
15
3
cute
adorable
cute
charming
smart
clever
cute - adorable, charming
smart - clever
Check your solution here: https://judge.softuni.bg/Contests/1311/
Solution: Word Synonyms
16
int n = Integer.parseInt(sc.nextLine());
Map<String, ArrayList<String>> words = new LinkedHashMap<>();
for (int i = 0; i < n; i++) {
String word = sc.nextLine();
String synonym = sc.nextLine();
words.putIfAbsent(word, new ArrayList<>());
words.get(word).add(synonym);
}
//TODO: Print each word and synonyms
Adding the key if
it does not exist
Check your solution here: https://judge.softuni.bg/Contests/1311/
Lambda Expressions
Anonymous Functions
Lambda Functions
 A lambda expression is an anonymous function containing
expressions and statements
 Lambda expressions
 Use the lambda operator ->
 Read as "goes to"
 The left side specifies the input parameters
 The right side holds the expression or statement
18
(a -> a > 5)
 Lambda functions are inline methods (functions)
that take input parameters and return values:
Lambda Functions
19
x -> x / 2 static int func(int x) { return x / 2; }
static boolean func(int x) { return x != 0; }x -> x != 0
() -> 42 static int func() { return 42; }
Stream API
Traversing and Querying Collections
 min() - finds the smallest element in a collection:
 max() - finds the largest element in a collection:
Processing Arrays with Stream API (1)
21
int min = Arrays.stream(new int[]{15, 25, 35}).min().getAsInt();
int max = Arrays.stream(new int[]{15, 25, 35}).max().getAsInt();
35
int min = Arrays.stream(new int[]{15, 25, 35}).min().orElse(2);
int min = Arrays.stream(new int[]{}).min().orElse(2); // 2
15
 sum() - finds the sum of all elements in a collection:
 average() - finds the average of all elements:
Processing Arrays with Stream API (2)
22
int sum = Arrays.stream(new int[]{15, 25, 35}).sum();
double avg = Arrays.stream(new int[]{15, 25, 35})
.average().getAsDouble();
75
25.0
 min()
Processing Collections with Stream API (1)
23
ArrayList<Integer> nums = new ArrayList<>() {{
add(15); add(25); add(35);
}};
int min = nums.stream().mapToInt(Integer::intValue)
.min().getAsInt();
int min = nums.stream()
.min(Integer::compareTo).get();
15
 max()
 sum()
Processing Collections with Stream API (2)
24
int max = nums.stream().mapToInt(Integer::intValue)
.max().getAsInt();
int max = nums.stream()
.max(Integer::compareTo).get();
int sum = nums.stream()
.mapToInt(Integer::intValue).sum();
35
75
 average()
Processing Collections with Stream API (3)
25
double avg = nums.stream()
.mapToInt(Integer::intValue)
.average()
.getAsDouble(); 25.0
 map() - manipulates elements in a collection:
Manipulating Collections
26
String[] words = {"abc", "def", "geh", "yyy"};
words = Arrays.stream(words)
.map(w -> w + "yyy")
.toArray(String[]::new);
//abcyyy, defyyy, gehyyy, yyyyyy
int[] nums = Arrays.stream(sc.nextLine().split(" "))
.mapToInt(e -> Integer.parseInt(e))
.toArray();
Parse each
element to
Integer
 Using toArray(), toList() to convert collections:
Converting Collections
27
int[] nums = Arrays.stream(sc.nextLine().split(" "))
.mapToInt(e -> Integer.parseInt(e))
.toArray();
List<Integer> nums = Arrays.stream(sc.nextLine()
.split(" "))
.map(e -> Integer.parseInt(e))
.collect(Collectors.toList());
 Using filter()
Filtering Collections
28
int[] nums = Arrays.stream(sc.nextLine().split(" "))
.mapToInt(e -> Integer.parseInt(e))
.filter(n -> n > 0)
.toArray();
 Read a string array
 Print only words which length is even
Problem: Word Filter
29
kiwi orange banana apple
kiwi
orange
banana
pizza cake pasta chips cake
Check your solution here: https://judge.softuni.bg/Contests/1311/
Solution: Word Filter
30
String[] words = Arrays.stream(sc.nextLine().split(" "))
.filter(w -> w.length() % 2 == 0)
.toArray(String[]::new);
for (String word : words) {
System.out.println(word);
}
Check your solution here: https://judge.softuni.bg/Contests/1311/
 Using sorted() to sort collections:
Sorting Collections
31
nums = nums.stream()
.sorted((n1, n2) -> n1.compareTo(n2))
.collect(Collectors.toList());
nums = nums.stream()
.sorted((n1, n2) -> n2.compareTo(n1))
.collect(Collectors.toList());
Ascending (Natural)
Order
Descending
Order
 Using sorted() to sort collections by multiple criteria:
Sorting Collections by Multiple Criteria
32
Map<Integer, String> products = new HashMap<>();
products.entrySet()
.stream()
.sorted((e1, e2) -> {
int res = e2.getValue().compareTo(e1.getValue());
if (res == 0)
res = e1.getKey().compareTo(e2.getKey());
return res; })
.forEach(e -> System.out.println(e.getKey() + " " + e.getValue()));
Second criteria
Terminates the stream
Using Functional forEach (1)
33
Map<String, ArrayList<Integer>> arr = new HashMap<>();
arr.entrySet().stream()
.sorted((a, b) -> {
if (a.getKey().compareTo(b.getKey()) == 0) {
int sumFirst = a.getValue().stream().mapToInt(x -> x).sum();
int sumSecond = b.getValue().stream().mapToInt(x -> x).sum();
return sumFirst - sumSecond;
}
return b.getKey().compareTo(a.getKey());
})
Second
criteria
Descending
sorting
Using Functional forEach (2)
34
.forEach(pair -> {
System.out.println("Key: " + pair.getKey());
System.out.print("Value: ");
pair.getValue().sort((a, b) -> a.compareTo(b));
for (int num : pair.getValue()) {
System.out.printf("%d ", num);
}
System.out.println();
});
 Read a list of numbers
 Print largest 3, if there are less than 3, print all of them
Problem: Largest 3 Numbers
35
10 30 15 20 50 5
50 30 20
1 2 3
3 2 1
20 30
30 20
Check your solution here: https://judge.softuni.bg/Contests/1311/
Solution: Largest 3 Numbers
36
List<Integer> nums = Arrays
.stream(sc.nextLine().split(" "))
.map(e -> Integer.parseInt(e))
.sorted((n1, n2) -> n2.compareTo(n1))
.limit(3)
.collect(Collectors.toList());
for (int num : nums) {
System.out.print(num + " ");
}
Check your solution here: https://judge.softuni.bg/Contests/1311/
 …
 …
 …
Summary
 Maps hold {key  value} pairs
 Keyset holds a set of unique keys
 Values hold a collection of values
 Iterating over a map
takes the entries as Map.Entry<K, V>
 Lambda and Stream API help
collection processing
 https://softuni.bg/courses/programming-fundamentals
SoftUni Diamond Partners
SoftUni Organizational Partners
 Software University – High-Quality Education and
Employment Opportunities
 softuni.bg
 Software University Foundation
 http://softuni.foundation/
 Software University @ Facebook
 facebook.com/SoftwareUniversity
 Software University Forums
 forum.softuni.bg
Trainings @ Software University (SoftUni)
 This course (slides, examples, demos, videos, homework, etc.)
is licensed under the "Creative Commons Attribution-
NonCommercial-ShareAlike 4.0 International" license
License
42

More Related Content

What's hot

16. Java stacks and queues
16. Java stacks and queues16. Java stacks and queues
16. Java stacks and queuesIntro C# Book
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlinintelliyole
 
Threads V4
Threads  V4Threads  V4
Threads V4Sunil OS
 
If You Think You Can Stay Away from Functional Programming, You Are Wrong
If You Think You Can Stay Away from Functional Programming, You Are WrongIf You Think You Can Stay Away from Functional Programming, You Are Wrong
If You Think You Can Stay Away from Functional Programming, You Are WrongMario Fusco
 
Java Foundations: Data Types and Type Conversion
Java Foundations: Data Types and Type ConversionJava Foundations: Data Types and Type Conversion
Java Foundations: Data Types and Type ConversionSvetlin Nakov
 
Java IO Streams V4
Java IO Streams V4Java IO Streams V4
Java IO Streams V4Sunil OS
 
List and Dictionary in python
List and Dictionary in pythonList and Dictionary in python
List and Dictionary in pythonSangita Panchal
 
Effective Java - Generics
Effective Java - GenericsEffective Java - Generics
Effective Java - GenericsRoshan Deniyage
 
Sequence and Traverse - Part 2
Sequence and Traverse - Part 2Sequence and Traverse - Part 2
Sequence and Traverse - Part 2Philip Schwarz
 
Оснви програмування . Паскаль ч.2
Оснви програмування . Паскаль ч.2Оснви програмування . Паскаль ч.2
Оснви програмування . Паскаль ч.2rznz
 

What's hot (20)

16. Java stacks and queues
16. Java stacks and queues16. Java stacks and queues
16. Java stacks and queues
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
 
Dsi lec7
Dsi lec7Dsi lec7
Dsi lec7
 
09. Java Methods
09. Java Methods09. Java Methods
09. Java Methods
 
Tuples in Python
Tuples in PythonTuples in Python
Tuples in Python
 
Threads V4
Threads  V4Threads  V4
Threads V4
 
If You Think You Can Stay Away from Functional Programming, You Are Wrong
If You Think You Can Stay Away from Functional Programming, You Are WrongIf You Think You Can Stay Away from Functional Programming, You Are Wrong
If You Think You Can Stay Away from Functional Programming, You Are Wrong
 
Өгөгдлийн бүтэц 13
Өгөгдлийн бүтэц 13Өгөгдлийн бүтэц 13
Өгөгдлийн бүтэц 13
 
Java Foundations: Data Types and Type Conversion
Java Foundations: Data Types and Type ConversionJava Foundations: Data Types and Type Conversion
Java Foundations: Data Types and Type Conversion
 
Python Programming
Python ProgrammingPython Programming
Python Programming
 
Java IO Streams V4
Java IO Streams V4Java IO Streams V4
Java IO Streams V4
 
Өгөгдлийн бүтэц 8,9
Өгөгдлийн бүтэц 8,9Өгөгдлийн бүтэц 8,9
Өгөгдлийн бүтэц 8,9
 
List and Dictionary in python
List and Dictionary in pythonList and Dictionary in python
List and Dictionary in python
 
Java Queue.pptx
Java Queue.pptxJava Queue.pptx
Java Queue.pptx
 
Effective Java - Generics
Effective Java - GenericsEffective Java - Generics
Effective Java - Generics
 
Pascal (динамічні структури даних)
Pascal (динамічні структури даних)Pascal (динамічні структури даних)
Pascal (динамічні структури даних)
 
Sequence and Traverse - Part 2
Sequence and Traverse - Part 2Sequence and Traverse - Part 2
Sequence and Traverse - Part 2
 
Python programming : List and tuples
Python programming : List and tuplesPython programming : List and tuples
Python programming : List and tuples
 
Lecture3 охп удамшил
Lecture3 охп удамшилLecture3 охп удамшил
Lecture3 охп удамшил
 
Оснви програмування . Паскаль ч.2
Оснви програмування . Паскаль ч.2Оснви програмування . Паскаль ч.2
Оснви програмування . Паскаль ч.2
 

Similar to 18. Java associative arrays

Chapter 22. Lambda Expressions and LINQ
Chapter 22. Lambda Expressions and LINQChapter 22. Lambda Expressions and LINQ
Chapter 22. Lambda Expressions and LINQIntro C# Book
 
Introduction to R programming
Introduction to R programmingIntroduction to R programming
Introduction to R programmingAlberto Labarga
 
Python_cheatsheet_numpy.pdf
Python_cheatsheet_numpy.pdfPython_cheatsheet_numpy.pdf
Python_cheatsheet_numpy.pdfAnonymousUser67
 
Numpy python cheat_sheet
Numpy python cheat_sheetNumpy python cheat_sheet
Numpy python cheat_sheetZahid Hasan
 
Collections In Scala
Collections In ScalaCollections In Scala
Collections In ScalaKnoldus Inc.
 
Let’s Talk About Ruby
Let’s Talk About RubyLet’s Talk About Ruby
Let’s Talk About RubyIan Bishop
 
Underscore.js
Underscore.jsUnderscore.js
Underscore.jstimourian
 
Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...
Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...
Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...CloudxLab
 
Legacy lambda code
Legacy lambda codeLegacy lambda code
Legacy lambda codePeter Lawrey
 
EX-6-Implement Matrix Multiplication with Hadoop Map Reduce.pptx
EX-6-Implement Matrix Multiplication with Hadoop Map Reduce.pptxEX-6-Implement Matrix Multiplication with Hadoop Map Reduce.pptx
EX-6-Implement Matrix Multiplication with Hadoop Map Reduce.pptxvishal choudhary
 
Real Time Big Data Management
Real Time Big Data ManagementReal Time Big Data Management
Real Time Big Data ManagementAlbert Bifet
 
Basic R Data Manipulation
Basic R Data ManipulationBasic R Data Manipulation
Basic R Data ManipulationChu An
 

Similar to 18. Java associative arrays (20)

Chapter 22. Lambda Expressions and LINQ
Chapter 22. Lambda Expressions and LINQChapter 22. Lambda Expressions and LINQ
Chapter 22. Lambda Expressions and LINQ
 
Spark workshop
Spark workshopSpark workshop
Spark workshop
 
Introduction to R programming
Introduction to R programmingIntroduction to R programming
Introduction to R programming
 
Python_cheatsheet_numpy.pdf
Python_cheatsheet_numpy.pdfPython_cheatsheet_numpy.pdf
Python_cheatsheet_numpy.pdf
 
Numpy python cheat_sheet
Numpy python cheat_sheetNumpy python cheat_sheet
Numpy python cheat_sheet
 
Numpy python cheat_sheet
Numpy python cheat_sheetNumpy python cheat_sheet
Numpy python cheat_sheet
 
Scala collections
Scala collectionsScala collections
Scala collections
 
Scala Collections
Scala CollectionsScala Collections
Scala Collections
 
07 java collection
07 java collection07 java collection
07 java collection
 
CLUSTERGRAM
CLUSTERGRAMCLUSTERGRAM
CLUSTERGRAM
 
Collections In Scala
Collections In ScalaCollections In Scala
Collections In Scala
 
Let’s Talk About Ruby
Let’s Talk About RubyLet’s Talk About Ruby
Let’s Talk About Ruby
 
Underscore.js
Underscore.jsUnderscore.js
Underscore.js
 
Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...
Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...
Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...
 
Legacy lambda code
Legacy lambda codeLegacy lambda code
Legacy lambda code
 
bobok
bobokbobok
bobok
 
EX-6-Implement Matrix Multiplication with Hadoop Map Reduce.pptx
EX-6-Implement Matrix Multiplication with Hadoop Map Reduce.pptxEX-6-Implement Matrix Multiplication with Hadoop Map Reduce.pptx
EX-6-Implement Matrix Multiplication with Hadoop Map Reduce.pptx
 
Programming in R
Programming in RProgramming in R
Programming in R
 
Real Time Big Data Management
Real Time Big Data ManagementReal Time Big Data Management
Real Time Big Data Management
 
Basic R Data Manipulation
Basic R Data ManipulationBasic R Data Manipulation
Basic R Data Manipulation
 

More from Intro C# Book

Java Problem solving
Java Problem solving Java Problem solving
Java Problem solving Intro C# Book
 
21. Java High Quality Programming Code
21. Java High Quality Programming Code21. Java High Quality Programming Code
21. Java High Quality Programming CodeIntro C# Book
 
20.5 Java polymorphism
20.5 Java polymorphism 20.5 Java polymorphism
20.5 Java polymorphism Intro C# Book
 
20.4 Java interfaces and abstraction
20.4 Java interfaces and abstraction20.4 Java interfaces and abstraction
20.4 Java interfaces and abstractionIntro C# Book
 
20.3 Java encapsulation
20.3 Java encapsulation20.3 Java encapsulation
20.3 Java encapsulationIntro C# Book
 
20.1 Java working with abstraction
20.1 Java working with abstraction20.1 Java working with abstraction
20.1 Java working with abstractionIntro C# Book
 
19. Java data structures algorithms and complexity
19. Java data structures algorithms and complexity19. Java data structures algorithms and complexity
19. Java data structures algorithms and complexityIntro C# Book
 
14. Java defining classes
14. Java defining classes14. Java defining classes
14. Java defining classesIntro C# Book
 
13. Java text processing
13.  Java text processing13.  Java text processing
13. Java text processingIntro C# Book
 
12. Java Exceptions and error handling
12. Java Exceptions and error handling12. Java Exceptions and error handling
12. Java Exceptions and error handlingIntro C# Book
 
05. Java Loops Methods and Classes
05. Java Loops Methods and Classes05. Java Loops Methods and Classes
05. Java Loops Methods and ClassesIntro C# Book
 
07. Java Array, Set and Maps
07.  Java Array, Set and Maps07.  Java Array, Set and Maps
07. Java Array, Set and MapsIntro C# Book
 
03 and 04 .Operators, Expressions, working with the console and conditional s...
03 and 04 .Operators, Expressions, working with the console and conditional s...03 and 04 .Operators, Expressions, working with the console and conditional s...
03 and 04 .Operators, Expressions, working with the console and conditional s...Intro C# Book
 
02. Data Types and variables
02. Data Types and variables02. Data Types and variables
02. Data Types and variablesIntro C# Book
 
01. Introduction to programming with java
01. Introduction to programming with java01. Introduction to programming with java
01. Introduction to programming with javaIntro C# Book
 
23. Methodology of Problem Solving
23. Methodology of Problem Solving23. Methodology of Problem Solving
23. Methodology of Problem SolvingIntro C# Book
 
21. High-Quality Programming Code
21. High-Quality Programming Code21. High-Quality Programming Code
21. High-Quality Programming CodeIntro C# Book
 
19. Data Structures and Algorithm Complexity
19. Data Structures and Algorithm Complexity19. Data Structures and Algorithm Complexity
19. Data Structures and Algorithm ComplexityIntro C# Book
 
18. Dictionaries, Hash-Tables and Set
18. Dictionaries, Hash-Tables and Set18. Dictionaries, Hash-Tables and Set
18. Dictionaries, Hash-Tables and SetIntro C# Book
 
16. Arrays Lists Stacks Queues
16. Arrays Lists Stacks Queues16. Arrays Lists Stacks Queues
16. Arrays Lists Stacks QueuesIntro C# Book
 

More from Intro C# Book (20)

Java Problem solving
Java Problem solving Java Problem solving
Java Problem solving
 
21. Java High Quality Programming Code
21. Java High Quality Programming Code21. Java High Quality Programming Code
21. Java High Quality Programming Code
 
20.5 Java polymorphism
20.5 Java polymorphism 20.5 Java polymorphism
20.5 Java polymorphism
 
20.4 Java interfaces and abstraction
20.4 Java interfaces and abstraction20.4 Java interfaces and abstraction
20.4 Java interfaces and abstraction
 
20.3 Java encapsulation
20.3 Java encapsulation20.3 Java encapsulation
20.3 Java encapsulation
 
20.1 Java working with abstraction
20.1 Java working with abstraction20.1 Java working with abstraction
20.1 Java working with abstraction
 
19. Java data structures algorithms and complexity
19. Java data structures algorithms and complexity19. Java data structures algorithms and complexity
19. Java data structures algorithms and complexity
 
14. Java defining classes
14. Java defining classes14. Java defining classes
14. Java defining classes
 
13. Java text processing
13.  Java text processing13.  Java text processing
13. Java text processing
 
12. Java Exceptions and error handling
12. Java Exceptions and error handling12. Java Exceptions and error handling
12. Java Exceptions and error handling
 
05. Java Loops Methods and Classes
05. Java Loops Methods and Classes05. Java Loops Methods and Classes
05. Java Loops Methods and Classes
 
07. Java Array, Set and Maps
07.  Java Array, Set and Maps07.  Java Array, Set and Maps
07. Java Array, Set and Maps
 
03 and 04 .Operators, Expressions, working with the console and conditional s...
03 and 04 .Operators, Expressions, working with the console and conditional s...03 and 04 .Operators, Expressions, working with the console and conditional s...
03 and 04 .Operators, Expressions, working with the console and conditional s...
 
02. Data Types and variables
02. Data Types and variables02. Data Types and variables
02. Data Types and variables
 
01. Introduction to programming with java
01. Introduction to programming with java01. Introduction to programming with java
01. Introduction to programming with java
 
23. Methodology of Problem Solving
23. Methodology of Problem Solving23. Methodology of Problem Solving
23. Methodology of Problem Solving
 
21. High-Quality Programming Code
21. High-Quality Programming Code21. High-Quality Programming Code
21. High-Quality Programming Code
 
19. Data Structures and Algorithm Complexity
19. Data Structures and Algorithm Complexity19. Data Structures and Algorithm Complexity
19. Data Structures and Algorithm Complexity
 
18. Dictionaries, Hash-Tables and Set
18. Dictionaries, Hash-Tables and Set18. Dictionaries, Hash-Tables and Set
18. Dictionaries, Hash-Tables and Set
 
16. Arrays Lists Stacks Queues
16. Arrays Lists Stacks Queues16. Arrays Lists Stacks Queues
16. Arrays Lists Stacks Queues
 

Recently uploaded

Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhimiss dipika
 
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls KolkataVIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一Fs
 
Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Paul Calvano
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationLinaWolf1
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts servicevipmodelshub1
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一z xss
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Dana Luther
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Sonam Pathan
 
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一Fs
 
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With RoomVIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Roomishabajaj13
 
定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一
定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一
定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一3sw2qly1
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)Christopher H Felton
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Sonam Pathan
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMartaLoveguard
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITMgdsc13
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书zdzoqco
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 

Recently uploaded (20)

Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhi
 
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls KolkataVIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
 
Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 Documentation
 
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
 
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
 
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With RoomVIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
 
定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一
定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一
定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一
 
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptx
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITM
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
 

18. Java associative arrays

  • 1. Collections and Queries Associative Arrays, Lambda and Stream API Software University http://softuni.bg SoftUni Team Technical Trainers
  • 3. Table of Contents 1. Associative Arrays  HashMap <key, value>  LinkedHashMap <key, value>  TreeMap <key, value> 2. Lambda 3. Stream API  Filtering  Mapping  Ordering
  • 4. Associative Arrays Collection of Key and Value Pairs
  • 5.  Associative arrays are arrays indexed by keys  Not by the numbers 0, 1, 2, … (like arrays)  Hold a set of pairs {key  value} Associative Arrays (Maps) 5 John Smith +1-555-8976 Lisa Smith +1-555-1234 Sam Doe +1-555-5030 Key Value
  • 6. Collections of Key and Value Pairs  HashMap<K, V>  Keys are unique  Uses a hash-table + list  LinkedHashMap<K, V>  Keys are unique  Keeps the keys in order of addition  TreeMap<K, V>  Keys are unique  Keeps its keys always sorted  Uses a balanced search tree 6
  • 7.  put(key, value) method  remove(key) method HashMap<String, Integer> airplanes = new HashMap<>(); airplanes.put("Boeing 737", 130); airplanes.put("Airbus A320", 150); Built-In Methods 7 HashMap<String, Integer> airplanes = new HashMap<>(); airplanes.put("Boeing 737", 130); airplanes.remove("Boeing 737");
  • 8.  containsKey(key)  containsValue(value) HashMap<String, Integer> map = new HashMap<>(); map.put("Airbus A320", 150); if (map.containsKey("Airbus A320")) System.out.println("Airbus A320 key exists"); Built-In methods (2) 8 HashMap<String, Integer> map = new HashMap<>(); map.put("Airbus A320", 150); System.out.println(map.containsValue(150)); //true System.out.println(map.containsValue(100)); //false
  • 9. HashMap: put() 9 HashMap<String, String> Key Value Hash Function Pesho 0881-123-987 Gosho 0881-123-789 Alice 0881-123-978
  • 10. HashMap: remove() 10 HashMap<String, String> Key Value Pesho Pesho Gosho 0881-123-987 0881-123-789 Alice 0881-123-978Hash Function
  • 11. Pesho 0881-123-987 TreeMap<K, V> – Example 11 TreeMap <String, String> Key Value Alice +359-899-55-592 Comparator Function
  • 12.  Iterate through objects of type Map.Entry<K, V>  Cannot modify the collection (read-only) Map<String, Double> fruits = new LinkedHashMap<>(); fruits.put("banana", 2.20); fruits.put("kiwi", 4.50); for (Map.Entry<K, V> entry : fruits.entrySet()) { System.out.printf("%s -> %.2f%n", entry.getKey(), entry.getValue()); } Iterating Through Map 12 entry.getKey() -> fruit name entry.getValue() -> fruit price
  • 13.  Read a list of real numbers and print them in ascending order along with their number of occurrences Problem: Count Real Numbers 13 8 2 2 8 2 2 -> 3 8 -> 2 1 5 1 3 1 -> 2 3 -> 1 5 -> 1 Check your solution here: https://judge.softuni.bg/Contests/1311/
  • 14. Solution: Count Real Numbers 14 double[] nums = Arrays.stream(sc.nextLine().split(" ")) .mapToDouble(Double::parseDouble).toArray(); Map<Double, Integer> counts = new TreeMap<>(); for (double num : nums) { if (!counts.containsKey(num)) counts.put(num, 0); counts.put(num, counts.get(num) + 1); } for (Map.Entry<Double, Integer> entry : counts.entrySet()) { DecimalFormat df = new DecimalFormat("#.#######"); System.out.printf("%s -> %d%n", df.format(entry.getKey()), entry.getValue()); } Overwrite the value Check your solution here: https://judge.softuni.bg/Contests/1311/
  • 15.  Read 2 * N lines of pairs word and synonym  Each word may have many synonyms Problem: Words Synonyms 15 3 cute adorable cute charming smart clever cute - adorable, charming smart - clever Check your solution here: https://judge.softuni.bg/Contests/1311/
  • 16. Solution: Word Synonyms 16 int n = Integer.parseInt(sc.nextLine()); Map<String, ArrayList<String>> words = new LinkedHashMap<>(); for (int i = 0; i < n; i++) { String word = sc.nextLine(); String synonym = sc.nextLine(); words.putIfAbsent(word, new ArrayList<>()); words.get(word).add(synonym); } //TODO: Print each word and synonyms Adding the key if it does not exist Check your solution here: https://judge.softuni.bg/Contests/1311/
  • 18. Lambda Functions  A lambda expression is an anonymous function containing expressions and statements  Lambda expressions  Use the lambda operator ->  Read as "goes to"  The left side specifies the input parameters  The right side holds the expression or statement 18 (a -> a > 5)
  • 19.  Lambda functions are inline methods (functions) that take input parameters and return values: Lambda Functions 19 x -> x / 2 static int func(int x) { return x / 2; } static boolean func(int x) { return x != 0; }x -> x != 0 () -> 42 static int func() { return 42; }
  • 20. Stream API Traversing and Querying Collections
  • 21.  min() - finds the smallest element in a collection:  max() - finds the largest element in a collection: Processing Arrays with Stream API (1) 21 int min = Arrays.stream(new int[]{15, 25, 35}).min().getAsInt(); int max = Arrays.stream(new int[]{15, 25, 35}).max().getAsInt(); 35 int min = Arrays.stream(new int[]{15, 25, 35}).min().orElse(2); int min = Arrays.stream(new int[]{}).min().orElse(2); // 2 15
  • 22.  sum() - finds the sum of all elements in a collection:  average() - finds the average of all elements: Processing Arrays with Stream API (2) 22 int sum = Arrays.stream(new int[]{15, 25, 35}).sum(); double avg = Arrays.stream(new int[]{15, 25, 35}) .average().getAsDouble(); 75 25.0
  • 23.  min() Processing Collections with Stream API (1) 23 ArrayList<Integer> nums = new ArrayList<>() {{ add(15); add(25); add(35); }}; int min = nums.stream().mapToInt(Integer::intValue) .min().getAsInt(); int min = nums.stream() .min(Integer::compareTo).get(); 15
  • 24.  max()  sum() Processing Collections with Stream API (2) 24 int max = nums.stream().mapToInt(Integer::intValue) .max().getAsInt(); int max = nums.stream() .max(Integer::compareTo).get(); int sum = nums.stream() .mapToInt(Integer::intValue).sum(); 35 75
  • 25.  average() Processing Collections with Stream API (3) 25 double avg = nums.stream() .mapToInt(Integer::intValue) .average() .getAsDouble(); 25.0
  • 26.  map() - manipulates elements in a collection: Manipulating Collections 26 String[] words = {"abc", "def", "geh", "yyy"}; words = Arrays.stream(words) .map(w -> w + "yyy") .toArray(String[]::new); //abcyyy, defyyy, gehyyy, yyyyyy int[] nums = Arrays.stream(sc.nextLine().split(" ")) .mapToInt(e -> Integer.parseInt(e)) .toArray(); Parse each element to Integer
  • 27.  Using toArray(), toList() to convert collections: Converting Collections 27 int[] nums = Arrays.stream(sc.nextLine().split(" ")) .mapToInt(e -> Integer.parseInt(e)) .toArray(); List<Integer> nums = Arrays.stream(sc.nextLine() .split(" ")) .map(e -> Integer.parseInt(e)) .collect(Collectors.toList());
  • 28.  Using filter() Filtering Collections 28 int[] nums = Arrays.stream(sc.nextLine().split(" ")) .mapToInt(e -> Integer.parseInt(e)) .filter(n -> n > 0) .toArray();
  • 29.  Read a string array  Print only words which length is even Problem: Word Filter 29 kiwi orange banana apple kiwi orange banana pizza cake pasta chips cake Check your solution here: https://judge.softuni.bg/Contests/1311/
  • 30. Solution: Word Filter 30 String[] words = Arrays.stream(sc.nextLine().split(" ")) .filter(w -> w.length() % 2 == 0) .toArray(String[]::new); for (String word : words) { System.out.println(word); } Check your solution here: https://judge.softuni.bg/Contests/1311/
  • 31.  Using sorted() to sort collections: Sorting Collections 31 nums = nums.stream() .sorted((n1, n2) -> n1.compareTo(n2)) .collect(Collectors.toList()); nums = nums.stream() .sorted((n1, n2) -> n2.compareTo(n1)) .collect(Collectors.toList()); Ascending (Natural) Order Descending Order
  • 32.  Using sorted() to sort collections by multiple criteria: Sorting Collections by Multiple Criteria 32 Map<Integer, String> products = new HashMap<>(); products.entrySet() .stream() .sorted((e1, e2) -> { int res = e2.getValue().compareTo(e1.getValue()); if (res == 0) res = e1.getKey().compareTo(e2.getKey()); return res; }) .forEach(e -> System.out.println(e.getKey() + " " + e.getValue())); Second criteria Terminates the stream
  • 33. Using Functional forEach (1) 33 Map<String, ArrayList<Integer>> arr = new HashMap<>(); arr.entrySet().stream() .sorted((a, b) -> { if (a.getKey().compareTo(b.getKey()) == 0) { int sumFirst = a.getValue().stream().mapToInt(x -> x).sum(); int sumSecond = b.getValue().stream().mapToInt(x -> x).sum(); return sumFirst - sumSecond; } return b.getKey().compareTo(a.getKey()); }) Second criteria Descending sorting
  • 34. Using Functional forEach (2) 34 .forEach(pair -> { System.out.println("Key: " + pair.getKey()); System.out.print("Value: "); pair.getValue().sort((a, b) -> a.compareTo(b)); for (int num : pair.getValue()) { System.out.printf("%d ", num); } System.out.println(); });
  • 35.  Read a list of numbers  Print largest 3, if there are less than 3, print all of them Problem: Largest 3 Numbers 35 10 30 15 20 50 5 50 30 20 1 2 3 3 2 1 20 30 30 20 Check your solution here: https://judge.softuni.bg/Contests/1311/
  • 36. Solution: Largest 3 Numbers 36 List<Integer> nums = Arrays .stream(sc.nextLine().split(" ")) .map(e -> Integer.parseInt(e)) .sorted((n1, n2) -> n2.compareTo(n1)) .limit(3) .collect(Collectors.toList()); for (int num : nums) { System.out.print(num + " "); } Check your solution here: https://judge.softuni.bg/Contests/1311/
  • 37.  …  …  … Summary  Maps hold {key  value} pairs  Keyset holds a set of unique keys  Values hold a collection of values  Iterating over a map takes the entries as Map.Entry<K, V>  Lambda and Stream API help collection processing
  • 41.  Software University – High-Quality Education and Employment Opportunities  softuni.bg  Software University Foundation  http://softuni.foundation/  Software University @ Facebook  facebook.com/SoftwareUniversity  Software University Forums  forum.softuni.bg Trainings @ Software University (SoftUni)
  • 42.  This course (slides, examples, demos, videos, homework, etc.) is licensed under the "Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International" license License 42

Editor's Notes

  1. © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.
  2. © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.
  3. © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.