Object Comparison: A Deep Dive into compareTo() and it()

Imagine your favorite coffee shop is closed for renovations. You will obviously start looking for another café that offers a similar atmosphere and your favorite coffee. Similarly, in programming, we encounter situations where we need equivalents for specific functions.

Why? Well, Maybe you are a Java programmer working on Python code, and re-programming the entire application in Java doesn’t seem to be a good option! In this article, we will explore Java’s compareTo() function, Its usage, and its equivalent in Python.

If you’re short on time and can’t read the whole article, here’s a quick summary. In Java, the

compareTo()
method is used for object comparison and ordering. Python offers a comparable alternative using the
__lt__()
magic method. This allows developers to easily compare and sort objects based on specific criteria.

Also check: Python For Loop: Introduction, Syntax, and Examples

Understanding Java’s compareTo() Method

The

compareTo()
method in Java is like a tool that helps you compare strings and objects. It lets you figure out if one string or object is greater, smaller, or equal to another one. You can do this by looking at their special features or by setting your own custom rules for comparison.

String Comparison with compareTo()

Imagine you have two names, “Ashutosh” and “Yadav”. In Java, you can use the

compareTo()
method to compare these two names and see which one comes first in alphabetical order.

String name1 = "Ashutosh";
String name2 = "Yadav";

int result = name1.compareTo(name2);

System.out.println(result);

The

compareTo()
method compares
name2
with
name1
and gives you a result.

  • If the
    result
    is negative, it means “Ashutosh” comes before “Yadav” in the alphabet.
  • If the
    result
    is positive, it means “Ashutosh” comes after “Yadav”.
  • If the
    result
    is zero, it means the names are the same.

Output:

-18

The output is -18, which is the difference between the Unicode value of the first character in ‘Ashutosh’ and ‘Yadav’ where they differ. A negative value indicates that ‘Ashutosh’ comes before ‘Yadav’ in alphabetical order.

You might be wondering why we got a random negative number “-18” as an output. The logic for this is hidden in the built-in implementation of the compareTo() function. It shows the difference in the Unicode value of the first character where the two strings differ.

Object Comparison in Java using the Comparable Interface

In Java, the

compareTo()
method can also be used together with the
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html">Comparable</a>
interface to compare objects, including strings, based on their natural ordering. The
Comparable
interface provides a way to define the comparison logic for objects of a class. For example:

public class Person implements Comparable<Person> {
    private String name;
    private int age;
    
    // Constructor and other methods omitted for simplicity
    
    public int compareTo(Person otherPerson) {
        // Compare based on age
        return this.age - otherPerson.age;
    }
}

In this example, the

Person
class implements the
Comparable
interface, indicating that instances(objects) of
Person
class can be compared to each other. Here the
compareTo()
method is customized to compare two
Person
objects based on their age by simply subtracting the ages.

By implementing

Comparable
and defining the comparison logic in
compareTo()
, you can compare
Person
objects using the
compareTo()
method. It allows you to easily determine/define the relative ordering of
Person
objects based on their age when sorting or comparing them which means you can set your own rules about how to compare 2 objects. To demonstrate the output, let’s assume we have two
Person
objects:

Person person1 = new Person("Ashu", 25);
Person person2 = new Person("Rahul", 30);

int result = person1.compareTo(person2);
System.out.println(result);

We have simply created 2 objects of the class

Person
with the names “Ashu” and “Rahul” with 25 and 30 as their respective ages. After that, we have called our custom compareTo() function which compares the ages of both people.

Output:

 -5

In this case, the value of

result
is
-5
, which is
25-30
. The negative value indicates that
person1
(Ashu) is considered “less” than
person2
(Rahul) based on their age comparison.

The

compareTo()
method can compare any two objects, as long as the class of those objects implements the
Comparable
interface and provides an implementation for the
compareTo()
method. The
String
class in Java implements the
Comparable
interface, which means it provides its own implementation of the
compareTo()
method.

Also check: How to Use Python map() Function?

Python’s Approach to Object Comparison: The __it__() Method

In Python, the equivalent method for

compareTo()
is
__lt__()
which stands for “less than”. It is a special method that is defined in the class itself and allows us to define our custom comparison behavior between 2 objects using the less-than operator (
&lt;
). It will be easy to understand this by an example.

Here’s an example that demonstrates the use of

__lt__()
:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __lt__(self, other):
        # Compare based on age
        return self.age < other.age

person1 = Person("Ashu", 25)
person2 = Person("Rahul", 30)

result = person1 < person2
print(result)

In this example, the

Person
class is equivalent to our Person class in Java. It defines the
__lt__()
method, which compares two
Person
objects based on their age.

  • The
    __lt__()
    method returns
    True
    if the age of the current object is less than the age of the other object;
  • It returns
    False
    for all other cases.

By using

__lt__()
method, we have compared
Person
objects
person1
and
person2
using the less-than operator (
&lt;
). Upon using < operator the
__lt__()
gets called and the ages of the person objects are compared.

Output:

True

The result in the example is

True
, indicating that
person1
(Alice) is considered “less” than
person2
(Bob) based on their age comparison. Although you can see that we cannot confirm if the objects are identical which we could do in Java’s
compareTo()
, this can be considered as a drawback.

Closing remarks

In conclusion, understanding the equivalents of

compareTo()
in different programming languages provides us with tools for object comparison. Whether it’s
compareTo()
in Java for comparing strings and implementing the
Comparable
interface, or
__lt__()
in Python for defining custom comparison behavior. These equivalents also enable us to establish the relative ordering of objects based on specific criteria. So, next time you encounter object comparison needs, remember to explore the equivalent methods in your programming language of choice for precise comparisons.

Know about more substitutes

Ninad Pathak
Ninad Pathak
Articles: 55