Hamcrest Collections Cookbook

1. Introduction

This cookbook illustrates how to make use of Hamcrest matchers to work with and test collections.

The format of the cookbook is example focused and practical – no extraneous details and explanations necessary.

First, let’s do a quick static import to cover most of the utility APIs we’re going to use next:

import static org.hamcrest.Matchers.*;

2. The Cookbook

Check if single element is in a collection

List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, hasItem("cd"));
assertThat(collection, not(hasItem("zz")));

Check if multiple elements are in a collection

List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, hasItems("cd", "ef"));

Check all elements in a collection – with strict order

List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, contains("ab", "cd", "ef"));

Check all elements in a collection – with any order

List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, containsInAnyOrder("cd", "ab", "ef"));

Check if collection is empty

List<String> collection = Lists.newArrayList();
assertThat(collection, empty());

Check if array is empty

String[] array = new String[] { "ab" };
assertThat(array, not(emptyArray()));

Check if Map is empty

Map<String, String> collection = Maps.newHashMap();
assertThat(collection, equalTo(Collections.EMPTY_MAP));

Check if Iterable is empty

Iterable<String> collection = Lists.newArrayList();
assertThat(collection, emptyIterable());

Check size of a collection

List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, hasSize(3));

Checking size of an iterable

Iterable<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, Matchers.<String> iterableWithSize(3));

Check condition on every item

List<Integer> collection = Lists.newArrayList(15, 20, 25, 30);
assertThat(collection, everyItem(greaterThan(10)));

3. Conclusion

This format is an experiment – I’m publishing some of my internal development cookbooks on a given topic – Google Guava and now Hamcrest. The goal is to have this information readily available online – and to add to it whenever I run into a new useful example.

The implementation of all these examples and code snippets can be found over on GitHub – this is a Maven-based project, so it should be easy to import and run as it is.

Related posts:

Java Program to Describe the Representation of Graph using Adjacency List
Java Program to Find ith Largest Number from a Given List Using Order-Statistic Algorithm
Chương trình Java đầu tiên
Java Program to Generate Random Numbers Using Multiply with Carry Method
Lớp Collectors trong Java 8
Java Program to implement Bit Matrix
Guide to java.util.concurrent.BlockingQueue
Java Program to Sort an Array of 10 Elements Using Heap Sort Algorithm
Get and Post Lists of Objects with RestTemplate
Different Ways to Capture Java Heap Dumps
Mockito and JUnit 5 – Using ExtendWith
Spring Boot - Logging
Check If a File or Directory Exists in Java
Java Program to Implement Leftist Heap
Getting Started with Custom Deserialization in Jackson
Java Program to Implement the Alexander Bogomolny’s UnOrdered Permutation Algorithm for Elements Fro...
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search
Java Map With Case-Insensitive Keys
Java Program to Check Whether a Weak Link i.e. Articulation Vertex Exists in a Graph
Logout in an OAuth Secured Application
Java Program to Permute All Letters of an Input String
Java Program to Check if a Given Set of Three Points Lie on a Single Line or Not
Spring Boot - Actuator
Java Program to Implement Hash Tree
Java Program to Implement Hash Tables Chaining with Binary Trees
Comparing Arrays in Java
Spring Boot - File Handling
Custom HTTP Header with the HttpClient
Java Program to Find Minimum Element in an Array using Linear Search
Spring Security – security none, filters none, access permitAll
Spring WebClient and OAuth2 Support
Primitive Type Streams in Java 8