Converting Between a List and a Set in Java

1. Overview

In this quick tutorial, we’ll take a look at the conversion between a List and a Set, starting with Plain Java, using Guava and the Apache Commons Collections library, and finally with Java 10.

2. Convert List to Set

2.1. With Plain Java

Let’s start with converting List to a Set using Java:

public void givenUsingCoreJava_whenListConvertedToSet_thenCorrect() {
    List<Integer> sourceList = Arrays.asList(0, 1, 2, 3, 4, 5);
    Set<Integer> targetSet = new HashSet<>(sourceList);
}

As we can see, the conversion process is type-safe and straightforward, since the constructors of each collection do accept another collection as a source.

2.2. With Guava

Let’s do the same conversion using Guava:

public void givenUsingGuava_whenListConvertedToSet_thenCorrect() {
    List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
    Set<Integer> targetSet = Sets.newHashSet(sourceList);
}

2.3. With Apache Commons Collections

Next let’s use the Commons Collections API to convert between a List and a Set:

public void givenUsingCommonsCollections_whenListConvertedToSet_thenCorrect() {
    List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
    Set<Integer> targetSet = new HashSet<>(6);
    CollectionUtils.addAll(targetSet, sourceList);
}

2.4. With Java 10

One additional option is to use the Set.copyOf static factory method introduced in Java 10:

public void givenUsingJava10_whenListConvertedToSet_thenCorrect() {
    List sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
    Set targetSet = Set.copyOf(sourceList);
}

Note that a Set created this way is unmodifiable.

3. Convert Set to List

3.1. With Plain Java

Now let’s do the reverse conversion, from a Set to a List, using Java:

public void givenUsingCoreJava_whenSetConvertedToList_thenCorrect() {
   Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
   List<Integer> targetList = new ArrayList<>(sourceSet);
}

3.2. With Guava

We can do the same using the Guava solution:

public void givenUsingGuava_whenSetConvertedToList_thenCorrect() {
    Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
    List<Integer> targetList = Lists.newArrayList(sourceSet);
}

This is very similar to the java approach, only with a little less duplicated code.

3.3. With Apache Commons Collections

Now let’s see the Commons Collections solution to convert between a Set and a List:

public void givenUsingCommonsCollections_whenSetConvertedToList_thenCorrect() {
    Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
    List<Integer> targetList = new ArrayList<>(6);
    CollectionUtils.addAll(targetList, sourceSet);
}

3.4. With Java 10

Finally, we can use the List.copyOf that’s been introduced in Java 10:

public void givenUsingJava10_whenSetConvertedToList_thenCorrect() {
    Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
    List<Integer> targetList = List.copyOf(sourceSet);
}

We need to keep in mind that the resulting List is unmodifiable.

4. Conclusion

The implementation of all of 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 Implement Interpolation Search Algorithm
Guide to Selenium with JUnit / TestNG
Spring NoSuchBeanDefinitionException
Spring Data – CrudRepository save() Method
Injecting Prototype Beans into a Singleton Instance in Spring
HttpAsyncClient Tutorial
Guide to CountDownLatch in Java
Quick Guide to the Java StringTokenizer
Documenting a Spring REST API Using OpenAPI 3.0
4 tính chất của lập trình hướng đối tượng trong Java
Calling Stored Procedures from Spring Data JPA Repositories
Java Program to Generate All Possible Subsets with Exactly k Elements in Each Subset
Spring Boot - Tomcat Port Number
Java Program to Use Above Below Primitive to Test Whether Two Lines Intersect
Introduction to Java Serialization
Phương thức forEach() trong java 8
Java Program to Implement HashTable API
Auditing with JPA, Hibernate, and Spring Data JPA
Spring Boot - Tracing Micro Service Logs
Getting Started with GraphQL and Spring Boot
Java Map With Case-Insensitive Keys
DistinctBy in the Java Stream API
Java Program to Check Whether a Directed Graph Contains a Eulerian Cycle
Java Program to Find Hamiltonian Cycle in an UnWeighted Graph
Java Program to Implement Randomized Binary Search Tree
Tạo ứng dụng Java RESTful Client với thư viện Retrofit
Validate email address exists or not by Java Code
Spring Cloud – Tracing Services with Zipkin
Guide to the Volatile Keyword in Java
A Quick Guide to Spring MVC Matrix Variables
Java Program to Implement Direct Addressing Tables
Java Program to Create a Random Graph Using Random Edge Generation