SlideShare a Scribd company logo
Comparable/Comparator Interfaces 
 Topics: 
 Comparable and Comparator interfaces in JCF 
 “Java Collections Framework” 
 Function objects 
1
Back to Java: Comparable / Comparator 
 In computing, we often want to order a set of items 
 Find the max/best or min/worst 
 Sort them in order 
 Note how this is different than what is needed for search 
(where we just need equals) 
 Need a way to compare two items 
 Want a flexible way to “compare” using different criteria 
 In Java, let’s us use Collection(s) methods to meet our 
own special needs. (Powerful!) 
2
Check out the Collections class 
 Class Collections 
 utility methods for doing operations on Collections, Lists (that 
almost always contain homogenous elements) 
 Note very similar Arrays class 
 See MSD textbook, Section 9.5, pp. 666f 
 Methods (static, mostly for Lists) 
 search a list for an item: binarySearch() 
 sort(), max(), min() -- uses compareTo() or Comparator object 
 reverse(), fill(), shuffle(), copy(), replaceAll() 
 List list2 = Collections.unmodifiableList(list1); // p. 668 
3
Comparable Interface 
 First solution: Can we ask an object how it compares 
to a second object? 
 Sure: string1.compareTo(string2) 
 Programming convention: Return value as follows: 
 zero if the same 
 negative value if first item strictly less than second 
 positive value if first item strictly greater than second 
 Java provides a Comparable interface 
int compareTo(YourClass o) 
 Note the parameter is an object of the same type as the 
class in which you’re defining compareTo() 
4
Hang on: What’s an Interface? 
 When defining a class, state that it “implements” an 
interface. E.g. 
public class Watch implements TimeKeeper { 
 What else is the meaning of the interface TimeKeeper? 
 A set of methods that any implementing class must 
include 
 TimeKeeper interface doesn’t define how these methods 
are coded 
 Watch (the implementing class) is promising to include 
those in its definition 
5
Example 
 A TimeKeeper Interface defined with its 2 methods: 
getTime() and set Time() 
 Now a Watch class is declared to implement 
TimeKeeper 
 Watch is promising to have these 2 methods as part 
of its definition (getTime() and setTime()) 
 Watch can implement those how ever it wants 
 It means Watch, by implementing TimeKeeper, can 
handle the TimeKeeper role 
6
Interface gives an Object another Type 
 With this definition: 
public class Watch implements TimeKeeper { 
 You can think of Watch in these ways: 
 You can treat a Watch object as a TimeKeeper 
 A Watch object can do “TimeKeeper things” 
 A Watch object can be used anywhere a TimeKeeper is legal 
to use 
 A Watch object has more than one type 
 It’s a Watch (defined by the class Watch) 
 It’s a TimeKeeper (defined by the interface) 
7
Interface gives an Object another Type 
 Interfaces are legal Java types. Therefore can be 
used 
 To declare variables 
 As a parameter type (passing a variable to a 
method) 
 As a return type 
8
Example 
 If you have a method that took a TimeKeeper as a 
parameter 
 A Watch could be used as a parameter to that method, 
because a Watch plays the role of a TimeKeeper 
 If that method takes a TimeKeeper as a parameter, then 
we can pass it a Watch 
  You can think of the Watch object as having more than 
one type. (Every Watch also fills the role as Time Keeper) 
9
What are we getting at? 
 The method sort can take an ArrayList as an argument (an 
ArrayList of something) Of what? It can take an ArrayList of 
anything that meets this interface called Comparable 
 The parameter has to be an ArrayList of any class that 
implements the comparable interface – that means it has 
the compareTo() method – which means inside of sort, it 
knows it can call get() to get 2 items from the ArrayList and 
use the compareTo() method – its guaranteed to have it 
because that class implements the Comparable interface 
10
Writing compareTo for Your Classes 
 If you ever want to put your own objects in 
Collections, and use sort(), max(), min(),… 
1. Make your class implement Comparable 
2. Implement the compareTo() method in your class 
 How to write compareTo()? 
 Think about state-variables that determine natural order 
 Compare them and return proper-value 
 Note: For number values, you can subtract. 
 For object values, call compareTo() on them. 
11
Let’s Get Practical 
 You can sort an ArrayList… BUT the ArrayList has 
to have things inside it that implement the 
Comparable Interface 
 Can we sort an ArrayList of Strings? 
 Go to API for class String (Google: “java api string”) 
 On “All Implemented Interfaces” – one of them is 
comparable! 
 Scroll to “Method Summary” – has compareTo() 
method! 
 So you can definitely sort an ArrayList of Strings 
12
Example: Writing compareTo() 
 Imagine something like an entry in a phonebook 
 Order by last name, first name, then number 
 int compareTo(PhoneBookEntry item2 ) { 
int retVal= last.compareTo(item2.last); 
if ( retVal != 0 ) return retVal; 
retVal = first.compareTo(item2.first); 
if ( retVal != 0 ) return retVal; 
retVal = phNum - item2.phNum; 
return retVal; 
} 
13
See Example done in class 
ECLIPSE EXAMPLE 
14
Under the Hood for Sorting 
 How might a sort() or any other method use this? Imagine: 
 Its parameter is of the type List<Comparable> 
 ArrayList is a type-of List in Java (more on this later) 
 Inside a loop, code might look like this: 
Comparable item1 = theList.get(i); 
Comparable item2 = theList.get(j); 
int cmpResult = item1.compareTo(item2); 
 Such code will work when the list stores any class that 
implements Comparable! 
 But, what happens if list-elements are of different classes (still 
Comparable, but different)? 
 compareTo() fails! 
15
Flexible Design using Comparators 
 Solution #1: Make classes Comparable 
 Disadvantage: just one way to compare is possible, 
because there’s just one compareTo method per class 
 Possible solutions: 
 Separate functions: sortByName(), sortByNum(),… 
 We can’t predict in advance how you’ll want to sort! 
 Pass a parameter to indicate control: 
sort(theList, “byName”) or sort(theList, “byNum”); 
 Ugh. Same problem as before 
 And the internals of sort() will grow to become very ugly 
16
Function Objects 
 We need to somehow pass “how to execute” 
information as a parameter to sort() 
 We pass objects as parameters 
 Can we pass a method/operation as an object? 
 Many languages support this, but in different ways: 
 C and C++ – pointers to functions 
 C# – delegates 
 Java – “function objects” that 
 implement a specified interface, and 
 the one method in that interface does the needed work 
17
Function Objects in Java 
 Idea: encapsulate a 
function inside a class 
 Note: not our usual idea of 
a class 
 State? (None.) 
 Identity? (Just need one 
instance.) 
 Represents an entity? 
(Nope! Just a place to 
stash a function so it can 
be passed as a 
parameter.) 
 Warning / caveat! 
 This idea is contrary to 
many OO principles, but… 
 Useful if done in limited 
circumstances 
 Use it when the libraries 
make it available 
 Not often part of your own 
class-design 
 But use it in libraries when 
it’s part of the framework 
18
Example: Comparator objects 
 We want to pass a function-object to a method: 
 Collections.sort(someList, function-object-goes-here); 
 But what type should this object be? 
 Use an Interface: 
 Interface name can be used as a type in the parameter list 
 Interface defines the method name itself! 
19
Example: Comparator objects 
 Java’s Comparator interface: 
int compare( Object o1, Object o2); 
 Notes: not compareTo()! Takes two parameters! 
 Define a class for each kind of comparison you want. 
E.g. 
 Classes: CmpStudentByGpa, CmpStudentByGpaDesc 
 Classes: CmpDogByName, CmpDogByBreed 
20
Writing a Comparator Class 
 Example like one from MSD text, p. 647 
 We have a Dog class with name, breed and gender 
 Compare two doggies by breed and then name 
public class CmpDogByBreedAndName implements Comparator<Dog> { 
public int compare(Dog d1, Dog d2) { 
int retVal = d1.getBreed().compareTo(d2.getBreed()); 
if ( retVal != 0 ) return retVal; 
return d1.getName().compareTo( d2.getName() ); 
} 
} 
21
Use of Comparator methods 
 How to use with Collections.sort() 
 ArrayList dogList = …; 
Collections.sort( dogList, new CmpDogByName() ); 
Collections.sort( dogList, new CmpDogByBreed() ); 
 (Do you understand what new does here?) 
 Inside sort(), code looks something like this: 
sort ( List theList, Comparator cmpObj ) { 
// in some loop 
Object item1 = list.get(i); 
Object item2 = list.get(j); 
cmpResult = cmpObj.compare(item1,item2); 
22
End of Comparable/Comparator 
topics 
 Keep these techniques in mind as we move 
forward 
23
Java Aside: Anonymous Classes 
 There’s a Java technique called anonymous classes 
 One of several types of nested class definition 
 You’ll very often see it in GUI programming (Swing) and 
with threads 
 Situation: 
 Sometimes Java’s design encourages us to create some 
thing that might be used just once 
 That thing needs to be wrapped up in a class, say 
because we need a function object 
24
Creating and Using an Anonymous Class 
 Example: sort a list of Strings by their length 
 Collections.sort ( stringList, new Comparator() { 
public int compare( Object o1, Object o2 ) { 
return ((String) o1).length() – 
((String) o2).length(); 
} 
} ) ; 
 We’ve created a new Comparator “on the fly” 
 new creates a new instance, but what kind? 
 Some object that implements Comparator 
 Object not named, and its “true” class not named! 
 What must a Comparator have? compare() 
 We defined it right here, where it’s used! 25
Anonymous Classes: Comments 
 Anonymous classes are 
unlike other classes 
 They have no name 
 Typically only implement 
methods in their interface or 
superclass. No new 
methods! 
 Since they have no name, 
can only define and use 
them at one point in your 
code! 
 Hard to understand at first? 
Sure! 
 Naming an abstraction is 
important for human 
understanding! 
 Sorting, a Collection, 
Comparing 
 Advice 
 Keep them very short (and 
simple)! 
 Be ready to understand 
them when you see them in 
Swing and with threads 
26

More Related Content

What's hot

form view
form viewform view
form view
AbiMurugan2
 
JAVA AWT
JAVA AWTJAVA AWT
JAVA AWT
shanmuga rajan
 
Java Collections
Java CollectionsJava Collections
Java Collectionsparag
 
Collection Framework in java
Collection Framework in javaCollection Framework in java
Collection Framework in java
CPD INDIA
 
Collections In Java
Collections In JavaCollections In Java
Collections In JavaBinoj T E
 
Java Swing
Java SwingJava Swing
Java Swing
Daniel Arndt Alves
 
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Edureka!
 
Event Handling in JAVA
Event Handling in JAVAEvent Handling in JAVA
Event Handling in JAVA
Srajan Shukla
 
Event handling
Event handlingEvent handling
Collections framework in java
Collections framework in javaCollections framework in java
Collections framework in java
yugandhar vadlamudi
 
Asp.NET Validation controls
Asp.NET Validation controlsAsp.NET Validation controls
Asp.NET Validation controls
Guddu gupta
 
This keyword in java
This keyword in javaThis keyword in java
This keyword in java
Hitesh Kumar
 
5 collection framework
5 collection framework5 collection framework
5 collection framework
Minal Maniar
 
JAVA Collections frame work ppt
 JAVA Collections frame work ppt JAVA Collections frame work ppt
JAVA Collections frame work ppt
Ranjith Alappadan
 
Java Collections Tutorials
Java Collections TutorialsJava Collections Tutorials
Java Collections Tutorials
Prof. Erwin Globio
 
Java Server Pages
Java Server PagesJava Server Pages
Java Server Pages
Kasun Madusanke
 
File Handling in Java Oop presentation
File Handling in Java Oop presentationFile Handling in Java Oop presentation
File Handling in Java Oop presentation
Azeemaj101
 

What's hot (20)

form view
form viewform view
form view
 
JAVA AWT
JAVA AWTJAVA AWT
JAVA AWT
 
Java Collections
Java CollectionsJava Collections
Java Collections
 
Collection Framework in java
Collection Framework in javaCollection Framework in java
Collection Framework in java
 
Collections In Java
Collections In JavaCollections In Java
Collections In Java
 
Java Swing
Java SwingJava Swing
Java Swing
 
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
 
Event Handling in JAVA
Event Handling in JAVAEvent Handling in JAVA
Event Handling in JAVA
 
Java interface
Java interfaceJava interface
Java interface
 
Controls in asp.net
Controls in asp.netControls in asp.net
Controls in asp.net
 
Vectors in Java
Vectors in JavaVectors in Java
Vectors in Java
 
Event handling
Event handlingEvent handling
Event handling
 
Collections framework in java
Collections framework in javaCollections framework in java
Collections framework in java
 
Asp.NET Validation controls
Asp.NET Validation controlsAsp.NET Validation controls
Asp.NET Validation controls
 
This keyword in java
This keyword in javaThis keyword in java
This keyword in java
 
5 collection framework
5 collection framework5 collection framework
5 collection framework
 
JAVA Collections frame work ppt
 JAVA Collections frame work ppt JAVA Collections frame work ppt
JAVA Collections frame work ppt
 
Java Collections Tutorials
Java Collections TutorialsJava Collections Tutorials
Java Collections Tutorials
 
Java Server Pages
Java Server PagesJava Server Pages
Java Server Pages
 
File Handling in Java Oop presentation
File Handling in Java Oop presentationFile Handling in Java Oop presentation
File Handling in Java Oop presentation
 

Similar to Comparable/ Comparator

Interfaces .ppt
Interfaces .pptInterfaces .ppt
Interfaces .ppt
AsifMulani17
 
Interfaces.ppt
Interfaces.pptInterfaces.ppt
Interfaces.ppt
VarunP31
 
Collections and generic class
Collections and generic classCollections and generic class
Collections and generic class
ifis
 
Unit 3 lecture-2
Unit 3 lecture-2Unit 3 lecture-2
Unit 3 lecture-2
vishal choudhary
 
Ch-2ppt.pptx
Ch-2ppt.pptxCh-2ppt.pptx
Ch-2ppt.pptx
ssuser8347a1
 
Introduction to Intermediate Java
Introduction to Intermediate JavaIntroduction to Intermediate Java
Introduction to Intermediate JavaPhilip Johnson
 
Classes objects in java
Classes objects in javaClasses objects in java
Classes objects in java
Madishetty Prathibha
 
Java mcq
Java mcqJava mcq
Java mcq
avinash9821
 
Comparable vs comparator
Comparable vs comparatorComparable vs comparator
Comparable vs comparator
Home
 
Comparable vs comparator
Comparable vs comparatorComparable vs comparator
Comparable vs comparatorDigvijayKale9
 
Java 8 - An Overview
Java 8 - An OverviewJava 8 - An Overview
Java 8 - An Overview
Indrajit Das
 
(7) c sharp introduction_advanvced_features_part_ii
(7) c sharp introduction_advanvced_features_part_ii(7) c sharp introduction_advanvced_features_part_ii
(7) c sharp introduction_advanvced_features_part_ii
Nico Ludwig
 
JAVA-PPT'S.pdf
JAVA-PPT'S.pdfJAVA-PPT'S.pdf
JAVA-PPT'S.pdf
AnmolVerma363503
 
Ap Power Point Chpt5
Ap Power Point Chpt5Ap Power Point Chpt5
Ap Power Point Chpt5dplunkett
 
Kotlin Playground.pptx
Kotlin Playground.pptxKotlin Playground.pptx
Kotlin Playground.pptx
GDSCVJTI
 
Java8: what's new and what's hot
Java8: what's new and what's hotJava8: what's new and what's hot
Java8: what's new and what's hot
Sergii Maliarov
 
Introduction to new features in java 8
Introduction to new features in java 8Introduction to new features in java 8

Similar to Comparable/ Comparator (20)

Interfaces .ppt
Interfaces .pptInterfaces .ppt
Interfaces .ppt
 
Interfaces.ppt
Interfaces.pptInterfaces.ppt
Interfaces.ppt
 
Collections
CollectionsCollections
Collections
 
Collections and generic class
Collections and generic classCollections and generic class
Collections and generic class
 
Unit 3 lecture-2
Unit 3 lecture-2Unit 3 lecture-2
Unit 3 lecture-2
 
Ch-2ppt.pptx
Ch-2ppt.pptxCh-2ppt.pptx
Ch-2ppt.pptx
 
Reflection
ReflectionReflection
Reflection
 
Introduction to Intermediate Java
Introduction to Intermediate JavaIntroduction to Intermediate Java
Introduction to Intermediate Java
 
Classes objects in java
Classes objects in javaClasses objects in java
Classes objects in java
 
Java mcq
Java mcqJava mcq
Java mcq
 
Java basics
Java basicsJava basics
Java basics
 
Comparable vs comparator
Comparable vs comparatorComparable vs comparator
Comparable vs comparator
 
Comparable vs comparator
Comparable vs comparatorComparable vs comparator
Comparable vs comparator
 
Java 8 - An Overview
Java 8 - An OverviewJava 8 - An Overview
Java 8 - An Overview
 
(7) c sharp introduction_advanvced_features_part_ii
(7) c sharp introduction_advanvced_features_part_ii(7) c sharp introduction_advanvced_features_part_ii
(7) c sharp introduction_advanvced_features_part_ii
 
JAVA-PPT'S.pdf
JAVA-PPT'S.pdfJAVA-PPT'S.pdf
JAVA-PPT'S.pdf
 
Ap Power Point Chpt5
Ap Power Point Chpt5Ap Power Point Chpt5
Ap Power Point Chpt5
 
Kotlin Playground.pptx
Kotlin Playground.pptxKotlin Playground.pptx
Kotlin Playground.pptx
 
Java8: what's new and what's hot
Java8: what's new and what's hotJava8: what's new and what's hot
Java8: what's new and what's hot
 
Introduction to new features in java 8
Introduction to new features in java 8Introduction to new features in java 8
Introduction to new features in java 8
 

Recently uploaded

Operation Blue Star - Saka Neela Tara
Operation Blue Star   -  Saka Neela TaraOperation Blue Star   -  Saka Neela Tara
Operation Blue Star - Saka Neela Tara
Balvir Singh
 
Home assignment II on Spectroscopy 2024 Answers.pdf
Home assignment II on Spectroscopy 2024 Answers.pdfHome assignment II on Spectroscopy 2024 Answers.pdf
Home assignment II on Spectroscopy 2024 Answers.pdf
Tamralipta Mahavidyalaya
 
Model Attribute Check Company Auto Property
Model Attribute  Check Company Auto PropertyModel Attribute  Check Company Auto Property
Model Attribute Check Company Auto Property
Celine George
 
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
MysoreMuleSoftMeetup
 
1.4 modern child centered education - mahatma gandhi-2.pptx
1.4 modern child centered education - mahatma gandhi-2.pptx1.4 modern child centered education - mahatma gandhi-2.pptx
1.4 modern child centered education - mahatma gandhi-2.pptx
JosvitaDsouza2
 
2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...
Sandy Millin
 
678020731-Sumas-y-Restas-Para-Colorear.pdf
678020731-Sumas-y-Restas-Para-Colorear.pdf678020731-Sumas-y-Restas-Para-Colorear.pdf
678020731-Sumas-y-Restas-Para-Colorear.pdf
CarlosHernanMontoyab2
 
BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...
BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...
BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...
Nguyen Thanh Tu Collection
 
How to Make a Field invisible in Odoo 17
How to Make a Field invisible in Odoo 17How to Make a Field invisible in Odoo 17
How to Make a Field invisible in Odoo 17
Celine George
 
Unit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdfUnit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdf
Thiyagu K
 
Biological Screening of Herbal Drugs in detailed.
Biological Screening of Herbal Drugs in detailed.Biological Screening of Herbal Drugs in detailed.
Biological Screening of Herbal Drugs in detailed.
Ashokrao Mane college of Pharmacy Peth-Vadgaon
 
Overview on Edible Vaccine: Pros & Cons with Mechanism
Overview on Edible Vaccine: Pros & Cons with MechanismOverview on Edible Vaccine: Pros & Cons with Mechanism
Overview on Edible Vaccine: Pros & Cons with Mechanism
DeeptiGupta154
 
Thesis Statement for students diagnonsed withADHD.ppt
Thesis Statement for students diagnonsed withADHD.pptThesis Statement for students diagnonsed withADHD.ppt
Thesis Statement for students diagnonsed withADHD.ppt
EverAndrsGuerraGuerr
 
special B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdfspecial B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdf
Special education needs
 
A Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in EducationA Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in Education
Peter Windle
 
Instructions for Submissions thorugh G- Classroom.pptx
Instructions for Submissions thorugh G- Classroom.pptxInstructions for Submissions thorugh G- Classroom.pptx
Instructions for Submissions thorugh G- Classroom.pptx
Jheel Barad
 
Polish students' mobility in the Czech Republic
Polish students' mobility in the Czech RepublicPolish students' mobility in the Czech Republic
Polish students' mobility in the Czech Republic
Anna Sz.
 
Chapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptxChapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptx
Mohd Adib Abd Muin, Senior Lecturer at Universiti Utara Malaysia
 
Phrasal Verbs.XXXXXXXXXXXXXXXXXXXXXXXXXX
Phrasal Verbs.XXXXXXXXXXXXXXXXXXXXXXXXXXPhrasal Verbs.XXXXXXXXXXXXXXXXXXXXXXXXXX
Phrasal Verbs.XXXXXXXXXXXXXXXXXXXXXXXXXX
MIRIAMSALINAS13
 
The approach at University of Liverpool.pptx
The approach at University of Liverpool.pptxThe approach at University of Liverpool.pptx
The approach at University of Liverpool.pptx
Jisc
 

Recently uploaded (20)

Operation Blue Star - Saka Neela Tara
Operation Blue Star   -  Saka Neela TaraOperation Blue Star   -  Saka Neela Tara
Operation Blue Star - Saka Neela Tara
 
Home assignment II on Spectroscopy 2024 Answers.pdf
Home assignment II on Spectroscopy 2024 Answers.pdfHome assignment II on Spectroscopy 2024 Answers.pdf
Home assignment II on Spectroscopy 2024 Answers.pdf
 
Model Attribute Check Company Auto Property
Model Attribute  Check Company Auto PropertyModel Attribute  Check Company Auto Property
Model Attribute Check Company Auto Property
 
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
 
1.4 modern child centered education - mahatma gandhi-2.pptx
1.4 modern child centered education - mahatma gandhi-2.pptx1.4 modern child centered education - mahatma gandhi-2.pptx
1.4 modern child centered education - mahatma gandhi-2.pptx
 
2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...
 
678020731-Sumas-y-Restas-Para-Colorear.pdf
678020731-Sumas-y-Restas-Para-Colorear.pdf678020731-Sumas-y-Restas-Para-Colorear.pdf
678020731-Sumas-y-Restas-Para-Colorear.pdf
 
BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...
BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...
BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...
 
How to Make a Field invisible in Odoo 17
How to Make a Field invisible in Odoo 17How to Make a Field invisible in Odoo 17
How to Make a Field invisible in Odoo 17
 
Unit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdfUnit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdf
 
Biological Screening of Herbal Drugs in detailed.
Biological Screening of Herbal Drugs in detailed.Biological Screening of Herbal Drugs in detailed.
Biological Screening of Herbal Drugs in detailed.
 
Overview on Edible Vaccine: Pros & Cons with Mechanism
Overview on Edible Vaccine: Pros & Cons with MechanismOverview on Edible Vaccine: Pros & Cons with Mechanism
Overview on Edible Vaccine: Pros & Cons with Mechanism
 
Thesis Statement for students diagnonsed withADHD.ppt
Thesis Statement for students diagnonsed withADHD.pptThesis Statement for students diagnonsed withADHD.ppt
Thesis Statement for students diagnonsed withADHD.ppt
 
special B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdfspecial B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdf
 
A Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in EducationA Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in Education
 
Instructions for Submissions thorugh G- Classroom.pptx
Instructions for Submissions thorugh G- Classroom.pptxInstructions for Submissions thorugh G- Classroom.pptx
Instructions for Submissions thorugh G- Classroom.pptx
 
Polish students' mobility in the Czech Republic
Polish students' mobility in the Czech RepublicPolish students' mobility in the Czech Republic
Polish students' mobility in the Czech Republic
 
Chapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptxChapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptx
 
Phrasal Verbs.XXXXXXXXXXXXXXXXXXXXXXXXXX
Phrasal Verbs.XXXXXXXXXXXXXXXXXXXXXXXXXXPhrasal Verbs.XXXXXXXXXXXXXXXXXXXXXXXXXX
Phrasal Verbs.XXXXXXXXXXXXXXXXXXXXXXXXXX
 
The approach at University of Liverpool.pptx
The approach at University of Liverpool.pptxThe approach at University of Liverpool.pptx
The approach at University of Liverpool.pptx
 

Comparable/ Comparator

  • 1. Comparable/Comparator Interfaces  Topics:  Comparable and Comparator interfaces in JCF  “Java Collections Framework”  Function objects 1
  • 2. Back to Java: Comparable / Comparator  In computing, we often want to order a set of items  Find the max/best or min/worst  Sort them in order  Note how this is different than what is needed for search (where we just need equals)  Need a way to compare two items  Want a flexible way to “compare” using different criteria  In Java, let’s us use Collection(s) methods to meet our own special needs. (Powerful!) 2
  • 3. Check out the Collections class  Class Collections  utility methods for doing operations on Collections, Lists (that almost always contain homogenous elements)  Note very similar Arrays class  See MSD textbook, Section 9.5, pp. 666f  Methods (static, mostly for Lists)  search a list for an item: binarySearch()  sort(), max(), min() -- uses compareTo() or Comparator object  reverse(), fill(), shuffle(), copy(), replaceAll()  List list2 = Collections.unmodifiableList(list1); // p. 668 3
  • 4. Comparable Interface  First solution: Can we ask an object how it compares to a second object?  Sure: string1.compareTo(string2)  Programming convention: Return value as follows:  zero if the same  negative value if first item strictly less than second  positive value if first item strictly greater than second  Java provides a Comparable interface int compareTo(YourClass o)  Note the parameter is an object of the same type as the class in which you’re defining compareTo() 4
  • 5. Hang on: What’s an Interface?  When defining a class, state that it “implements” an interface. E.g. public class Watch implements TimeKeeper {  What else is the meaning of the interface TimeKeeper?  A set of methods that any implementing class must include  TimeKeeper interface doesn’t define how these methods are coded  Watch (the implementing class) is promising to include those in its definition 5
  • 6. Example  A TimeKeeper Interface defined with its 2 methods: getTime() and set Time()  Now a Watch class is declared to implement TimeKeeper  Watch is promising to have these 2 methods as part of its definition (getTime() and setTime())  Watch can implement those how ever it wants  It means Watch, by implementing TimeKeeper, can handle the TimeKeeper role 6
  • 7. Interface gives an Object another Type  With this definition: public class Watch implements TimeKeeper {  You can think of Watch in these ways:  You can treat a Watch object as a TimeKeeper  A Watch object can do “TimeKeeper things”  A Watch object can be used anywhere a TimeKeeper is legal to use  A Watch object has more than one type  It’s a Watch (defined by the class Watch)  It’s a TimeKeeper (defined by the interface) 7
  • 8. Interface gives an Object another Type  Interfaces are legal Java types. Therefore can be used  To declare variables  As a parameter type (passing a variable to a method)  As a return type 8
  • 9. Example  If you have a method that took a TimeKeeper as a parameter  A Watch could be used as a parameter to that method, because a Watch plays the role of a TimeKeeper  If that method takes a TimeKeeper as a parameter, then we can pass it a Watch   You can think of the Watch object as having more than one type. (Every Watch also fills the role as Time Keeper) 9
  • 10. What are we getting at?  The method sort can take an ArrayList as an argument (an ArrayList of something) Of what? It can take an ArrayList of anything that meets this interface called Comparable  The parameter has to be an ArrayList of any class that implements the comparable interface – that means it has the compareTo() method – which means inside of sort, it knows it can call get() to get 2 items from the ArrayList and use the compareTo() method – its guaranteed to have it because that class implements the Comparable interface 10
  • 11. Writing compareTo for Your Classes  If you ever want to put your own objects in Collections, and use sort(), max(), min(),… 1. Make your class implement Comparable 2. Implement the compareTo() method in your class  How to write compareTo()?  Think about state-variables that determine natural order  Compare them and return proper-value  Note: For number values, you can subtract.  For object values, call compareTo() on them. 11
  • 12. Let’s Get Practical  You can sort an ArrayList… BUT the ArrayList has to have things inside it that implement the Comparable Interface  Can we sort an ArrayList of Strings?  Go to API for class String (Google: “java api string”)  On “All Implemented Interfaces” – one of them is comparable!  Scroll to “Method Summary” – has compareTo() method!  So you can definitely sort an ArrayList of Strings 12
  • 13. Example: Writing compareTo()  Imagine something like an entry in a phonebook  Order by last name, first name, then number  int compareTo(PhoneBookEntry item2 ) { int retVal= last.compareTo(item2.last); if ( retVal != 0 ) return retVal; retVal = first.compareTo(item2.first); if ( retVal != 0 ) return retVal; retVal = phNum - item2.phNum; return retVal; } 13
  • 14. See Example done in class ECLIPSE EXAMPLE 14
  • 15. Under the Hood for Sorting  How might a sort() or any other method use this? Imagine:  Its parameter is of the type List<Comparable>  ArrayList is a type-of List in Java (more on this later)  Inside a loop, code might look like this: Comparable item1 = theList.get(i); Comparable item2 = theList.get(j); int cmpResult = item1.compareTo(item2);  Such code will work when the list stores any class that implements Comparable!  But, what happens if list-elements are of different classes (still Comparable, but different)?  compareTo() fails! 15
  • 16. Flexible Design using Comparators  Solution #1: Make classes Comparable  Disadvantage: just one way to compare is possible, because there’s just one compareTo method per class  Possible solutions:  Separate functions: sortByName(), sortByNum(),…  We can’t predict in advance how you’ll want to sort!  Pass a parameter to indicate control: sort(theList, “byName”) or sort(theList, “byNum”);  Ugh. Same problem as before  And the internals of sort() will grow to become very ugly 16
  • 17. Function Objects  We need to somehow pass “how to execute” information as a parameter to sort()  We pass objects as parameters  Can we pass a method/operation as an object?  Many languages support this, but in different ways:  C and C++ – pointers to functions  C# – delegates  Java – “function objects” that  implement a specified interface, and  the one method in that interface does the needed work 17
  • 18. Function Objects in Java  Idea: encapsulate a function inside a class  Note: not our usual idea of a class  State? (None.)  Identity? (Just need one instance.)  Represents an entity? (Nope! Just a place to stash a function so it can be passed as a parameter.)  Warning / caveat!  This idea is contrary to many OO principles, but…  Useful if done in limited circumstances  Use it when the libraries make it available  Not often part of your own class-design  But use it in libraries when it’s part of the framework 18
  • 19. Example: Comparator objects  We want to pass a function-object to a method:  Collections.sort(someList, function-object-goes-here);  But what type should this object be?  Use an Interface:  Interface name can be used as a type in the parameter list  Interface defines the method name itself! 19
  • 20. Example: Comparator objects  Java’s Comparator interface: int compare( Object o1, Object o2);  Notes: not compareTo()! Takes two parameters!  Define a class for each kind of comparison you want. E.g.  Classes: CmpStudentByGpa, CmpStudentByGpaDesc  Classes: CmpDogByName, CmpDogByBreed 20
  • 21. Writing a Comparator Class  Example like one from MSD text, p. 647  We have a Dog class with name, breed and gender  Compare two doggies by breed and then name public class CmpDogByBreedAndName implements Comparator<Dog> { public int compare(Dog d1, Dog d2) { int retVal = d1.getBreed().compareTo(d2.getBreed()); if ( retVal != 0 ) return retVal; return d1.getName().compareTo( d2.getName() ); } } 21
  • 22. Use of Comparator methods  How to use with Collections.sort()  ArrayList dogList = …; Collections.sort( dogList, new CmpDogByName() ); Collections.sort( dogList, new CmpDogByBreed() );  (Do you understand what new does here?)  Inside sort(), code looks something like this: sort ( List theList, Comparator cmpObj ) { // in some loop Object item1 = list.get(i); Object item2 = list.get(j); cmpResult = cmpObj.compare(item1,item2); 22
  • 23. End of Comparable/Comparator topics  Keep these techniques in mind as we move forward 23
  • 24. Java Aside: Anonymous Classes  There’s a Java technique called anonymous classes  One of several types of nested class definition  You’ll very often see it in GUI programming (Swing) and with threads  Situation:  Sometimes Java’s design encourages us to create some thing that might be used just once  That thing needs to be wrapped up in a class, say because we need a function object 24
  • 25. Creating and Using an Anonymous Class  Example: sort a list of Strings by their length  Collections.sort ( stringList, new Comparator() { public int compare( Object o1, Object o2 ) { return ((String) o1).length() – ((String) o2).length(); } } ) ;  We’ve created a new Comparator “on the fly”  new creates a new instance, but what kind?  Some object that implements Comparator  Object not named, and its “true” class not named!  What must a Comparator have? compare()  We defined it right here, where it’s used! 25
  • 26. Anonymous Classes: Comments  Anonymous classes are unlike other classes  They have no name  Typically only implement methods in their interface or superclass. No new methods!  Since they have no name, can only define and use them at one point in your code!  Hard to understand at first? Sure!  Naming an abstraction is important for human understanding!  Sorting, a Collection, Comparing  Advice  Keep them very short (and simple)!  Be ready to understand them when you see them in Swing and with threads 26