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 Search for an Element in a Binary Search Tree
Hướng dẫn Java Design Pattern – Iterator
Java Program to Implement Horner Algorithm
Configuring a DataSource Programmatically in Spring Boot
Java Program to Implement Word Wrap Problem
Luồng Daemon (Daemon Thread) trong Java
Java Program to Generate a Random Subset by Coin Flipping
Java Program to Find the Median of two Sorted Arrays using Binary Search Approach
Java Program to Implement Cubic convergence 1/pi Algorithm
The Thread.join() Method in Java
Using a List of Values in a JdbcTemplate IN Clause
Batch Processing with Spring Cloud Data Flow
Java – Try with Resources
Tạo chương trình Java đầu tiên sử dụng Eclipse
Java Program to Solve any Linear Equations
Using the Map.Entry Java Class
Java Program to Implement the linear congruential generator for Pseudo Random Number Generation
Một số ký tự đặc biệt trong Java
Java Program to Implement Sorted Circular Doubly Linked List
Giới thiệu Google Guice – Dependency injection (DI) framework
Java Program to Implement Depth-limited Search
Overflow and Underflow in Java
Introduction to Spring Cloud OpenFeign
Java Program to Check if a Given Set of Three Points Lie on a Single Line or Not
Guide to Spring 5 WebFlux
Jackson – Unmarshall to Collection/Array
A Guide to Apache Commons Collections CollectionUtils
Java Program to Describe the Representation of Graph using Incidence Matrix
Quick Intro to Spring Cloud Configuration
Refactoring Design Pattern với tính năng mới trong Java 8
Hướng dẫn Java Design Pattern – Bridge
Implementing a Runnable vs Extending a Thread