
- Groovy Tutorial
- Groovy - Home
- Groovy - Overview
- Groovy - Environment
- Groovy - Basic Syntax
- Groovy - Data Types
- Groovy - Variables
- Groovy - Optionals
- Groovy - Numbers
- Groovy - Strings
- Groovy - Ranges
- Groovy - Lists
- Groovy - Maps
- Groovy - Dates & Times
Groovy Operators
- Groovy - Operators
- Groovy - Arithmetic Operators
- Groovy - Assignment Operators
- Groovy - Relational Operators
- Groovy - Logical Operators
- Groovy - Bitwise Operators
- Groovy - Spaceship Operator
- Groovy - in Operator
- Groovy - Elvis Operator
- Groovy - Safe Navigation Operator
- Groovy Operator Precedence & Associativity
Control Statements
- Groovy - Decision Making
- Groovy - If Else Statement
- Groovy - Switch Statement
- Groovy - Loops
- Groovy - For Loop
- Groovy - For-in Loop
- Groovy - While Loop
- Groovy - Do While Loop
- Groovy - Break Statement
- Groovy - Continue Statement
Groovy File Handling
- Groovy - File I/O
- Java - Create a File
- Java - Write to File
- Java - Append to File
- Java - Read Files
- Java - Delete Files
- Java - File Properties
- Java - File Existence and Type
- Java - File Size
- Java - File Permissions
- Java - Directories
- Java - Listing Directories
- Java - Filtering Files/Directories
- Java - Deleting Directories
- Java - Renaming Files/Directories
Groovy Error & Exceptions
- Groovy - Exception Handling
- Groovy - try-catch Block
- Groovy - try-with-resources
- Groovy - Multi-catch Block
- Groovy - Nested try Block
- Groovy - Finally Block
- Groovy - throw Exception
- Groovy - Exception Propagation
- Groovy - Built-in Exceptions
- Groovy - Custom Exception
Groovy Multithreading
- groovy - Multithreading
- groovy - Thread Life Cycle
- groovy - Creating a Thread
- groovy - Starting a Thread
- groovy - Joining Threads
- groovy - Naming Thread
- groovy - Thread Scheduler
- groovy - Thread Pools
- groovy - Main Thread
- groovy - Thread Priority
- groovy - Daemon Threads
- groovy - Shutdown Hook
Groovy Synchronization
- groovy - Synchronization
- groovy - Block Synchronization
- groovy - Static Synchronization
- groovy - Inter-thread Communication
- groovy - Thread Deadlock
- groovy - Interrupting a Thread
- groovy - Thread Control
- groovy - Reentrant Monitor
- Groovy - Methods
- Groovy - Methods
- Groovy - Optional parenthesis
- Groovy - Named Arguments
- Groovy - Closures as Arguments
- Groovy - Method Overloading
- Groovy - Method Scope and Visibility
- Groovy - isCase Method
- Groovy - Implicit Return
- Groovy - Variable Arguments
- Groovy - Regular Expressions
- Groovy - Regular Expressions
- Groovy - Defining Regular Expressions
- Groovy - Matcher Object
- Groovy - Regex Tasks
- Groovy - XML
- Groovy - XML
- Groovy - Parsing XML
- Groovy - Creating XML
- Groovy - Modifying XML
- Groovy - Querying XML
- Groovy - Simplified Notation
- Groovy - Closure based Querying
- Groovy - Closure based Creation
- Groovy - JSON
- Groovy - JSON
- Groovy - Parsing JSON
- Groovy - Creating JSON using JsonOutput
- Groovy - Creating JSON using JsonBuilder
- Groovy - Modifying JSON
- Groovy - Error Handling
- Groovy - Handling JSON Arrays
- Groovy - JSON Array Operations
- Groovy - JSON Objects
- Groovy - JSON Object Operations
- Groovy - Generics
- Groovy - Generics
- Groovy - Declaring Generic Types
- Groovy - Bound Type Parameters
- Groovy - Wild Cards
- Groovy - Miscellaneous
- Groovy - Object Oriented
- Groovy - Closures
- Groovy - Annotations
- Groovy - JMX
- Groovy - DSLS
- Groovy - Database
- Groovy - Builders
- Groovy - Command Line
- Groovy - Unit Testing
- Groovy - Template Engines
- Groovy - Meta Object Programming
- Groovy Useful Resources
- Groovy - Quick Guide
- Groovy - Useful Resources
- Groovy - Discussion
Groovy - List unique(boolean mutate, Closure closure) method
Description
Groovy List unique(boolean mutate, Closure closure) method modifies the list by removing any duplicates. If mutate is true, then original list is modified as well. Duplicates are removed using Groovy's default number-aware comparator. Closure is used to determine unique items. If single argument is passed to closure, then it should return a value used for comparison. In case of two arguments are passed, then closure should return an int value where 0 indicates items are not unique.
Syntax
public List unique(boolean mutate, Closure closure)
Parameters
mutate − if true, then original list is modified as well.
closure − a closure to check uniqueness of elements.
Return Value
A list of unique elements of the list.
Example - Getting Unique elements from a List of Integers
Following is an example of the usage of this method −
main.groovy
def lst = [11, 12, 13, 10, 15, 11, 10, 12, 15] // getting list of unique and even elements uniqueList = lst.unique(false){ it % 2} println(uniqueList) // getting list of unique elements uniqueList = lst.unique(false){ a, b -> a <=> b} println(uniqueList)
Output
When we run the above program, we will get the following result −
[11, 12] [11, 12, 13, 10, 15]
Example - Getting Unique elements from a List of Strings
Following is an example of the usage of this method −
main.groovy
def lst = ["Apple","Mango","Orange","Papaya","Apple", "Apple"] // getting list of unique and even elements uniqueList = lst.unique(false){ it.size() % 2} println(uniqueList) // getting list of unique elements uniqueList = lst.unique(false){ a, b -> a <=> b} println(uniqueList)
Output
When we run the above program, we will get the following result −
[Apple, Orange] [Apple, Mango, Orange, Papaya]
Example - Getting Unique elements from a List of Objects
Following is an example of the usage of this method −
main.groovy
def lst = [new Student(1, "Julie"),new Student(2, "Robert"),new Student(1, "Julie")] // getting list of unique and even elements uniqueList = lst.unique(false){ it.getRollNo() % 2} println(uniqueList) // getting list of unique elements uniqueList = lst.unique(false){ a, b -> a.getName() <=> b.getName()} println(uniqueList) class Student implements Comparable { int rollNo; String name; Student(int rollNo, String name){ this.rollNo = rollNo; this.name = name; } @Override public boolean equals(Object obj) { Student s = (Student)obj; return this.rollNo == s.rollNo && this.name.equalsIgnoreCase(s.name); } @Override public String toString() { return "[ " + this.rollNo + ", " + this.name + " ]"; } public int compareTo(Object obj){ Student s = (Student)obj; return this.rollNo - s.rollNo } }
Output
When we run the above program, we will get the following result −
[[ 1, Julie ], [ 2, Robert ]] [[ 1, Julie ], [ 2, Robert ]]