Java 8 – How to merge/concatenate/join two lists into single list ?

In this article, we will discuss with an example for joining or concatenating or merging two or more lists into single list using Java 1.8 version

Previously we have seen an example to join or concatenate two or more Arrays into single Arrays

Merging two lists into single list :

  1. Using Stream.concat() method
  2. Using Stream.of() & Stream.flatMap() methods
  3. Using ListUtils.union() method
  4. Using Collections class’ utility method – Collections.addAll()
  5. Using addAll() method of Collection interface
  6. Using Iterator interface
  7. Using for-loop

1. Using Stream.concat() method

  • There are 2 lists
    1. fruit list
    2. veggies list
  • Merge both list using Stream.concat() method which accepts 2 Stream arguments
  • Finally, print merged list to the console

MergeListUsingStreamConcat.java

package in.bench.resources.java8.merge.list;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class MergeListUsingStreamConcat {

	public static void main(String[] args) {

		// list 1 - fruits
		List<String> fruits = Arrays.asList(
				"Apple",
				"Mango",
				"Grape",
				"Cherry",
				"Melon"
				);
		System.out.println("Fruit List :- \n" + fruits);


		// list 2 - vegetables
		List<String> veggies = Arrays.asList(
				"Carrot",
				"Radish",
				"Lettuce",
				"Bean",
				"Gourd"
				);
		System.out.println("\nVeggies List :- \n" + veggies);


		// Merging 2 lists
		List<String> mergedList = Stream
				.concat(fruits.stream(), veggies.stream())
				.collect(Collectors.toList());


		// print merged list to the console
		System.out.println("\nMerged List :- \n" + mergedList);
	}
}

Output:

Fruit List :- 
[Apple, Mango, Grape, Cherry, Melon]

Veggies List :- 
[Carrot, Radish, Lettuce, Bean, Gourd]

Merged List :- 
[Apple, Mango, Grape, Cherry, Melon, Carrot, Radish, Lettuce, Bean, Gourd]

2. Using Stream.of() and Stream.flatMap() methods

MergeListUsingStreamOfAndFlatMap.java

package in.bench.resources.java8.merge.list;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class MergeListUsingStreamOfAndFlatMap {

	public static void main(String[] args) {

		// list 1 - fruits
		List<String> fruits = Arrays.asList(
				"Apple",
				"Mango",
				"Grape",
				"Cherry",
				"Melon"
				);
		System.out.println("Fruit List :- \n" + fruits);


		// list 2 - vegetables
		List<String> veggies = Arrays.asList(
				"Carrot",
				"Radish",
				"Lettuce",
				"Bean",
				"Gourd"
				);
		System.out.println("\nVeggies List :- \n" + veggies);


		// Merging 2 lists
		List<String> mergedList = Stream
				.of(fruits, veggies)
				.flatMap(Collection::stream)
				.collect(Collectors.toList());


		// print merged list to the console
		System.out.println("\nMerged List :- \n" + mergedList);
	}
}

Output:

Fruit List :- 
[Apple, Mango, Grape, Cherry, Melon]

Veggies List :- 
[Carrot, Radish, Lettuce, Bean, Gourd]

Merged List :- 
[Apple, Mango, Grape, Cherry, Melon, Carrot, Radish, Lettuce, Bean, Gourd]

3. Using ListUtils.union() method

  • ListUtils.union() method accepts 2 List arguments
    • Returns a new list containing the second list appended to the first list
    • The List.addAll(Collection) operation is used to append the two given lists into a new list
  • For this example to work, external JAR needs to be added to the classpathdownload apache commons collections
  • Finally, print merged list to the console

MergeListUsingListUtilsUnionMethod.java

package in.bench.resources.java8.merge.list;

import java.util.Arrays;
import java.util.List;

import org.apache.commons.collections4.ListUtils;

public class MergeListUsingListUtilsUnionMethod {

	public static void main(String[] args) {

		// list 1 - fruits
		List<String> fruits = Arrays.asList(
				"Apple",
				"Mango",
				"Grape",
				"Cherry",
				"Melon"
				);
		System.out.println("Fruit List :- \n" + fruits);


		// list 2 - vegetables
		List<String> veggies = Arrays.asList(
				"Carrot",
				"Radish",
				"Lettuce",
				"Bean",
				"Gourd"
				);
		System.out.println("\nVeggies List :- \n" + veggies);


		// Merging 2 lists
		List<String> mergedList = ListUtils.union(fruits, veggies);


		// print merged list to the console
		System.out.println("\nMerged List :- \n" + mergedList);
	}
}

Output:

Fruit List :- 
[Apple, Mango, Grape, Cherry, Melon]

Veggies List :- 
[Carrot, Radish, Lettuce, Bean, Gourd]

Merged List :- 
[Apple, Mango, Grape, Cherry, Melon, Carrot, Radish, Lettuce, Bean, Gourd]

4. Using Collections class utility method – Collections.addAll()

  • There are 2 lists
    1. fruits list
    2. veggies list
  • Collections.addAll() method accepts 2 input-arguments where,
    • 1st argument is the list where all elements need to be merged
    • 2nd argument is the varargs (variables arguments) or simply an Arrays
  • In this illustration, convert 2nd list into Arrays and then pass
    • first list as 1st argument
    • converted Arrays as 2nd argument
  • Finally, print merged list to the console

MergeListUsingCollectionsAddAllMethod.java

package in.bench.resources.java8.merge.list;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MergeListUsingCollectionsAddAllMethod {

	public static void main(String[] args) {

		// list 1 - fruits
		List<String> fruits = new ArrayList<>();
		fruits.add("Apple");
		fruits.add("Mango");
		fruits.add("Grape");
		fruits.add("Cherry");
		fruits.add("Melon");
		System.out.println("Fruit List :- \n" + fruits);


		// list 2 - vegetables
		List<String> veggies = new ArrayList<>();
		veggies.add("Carrot");
		veggies.add("Radish");
		veggies.add("Lettuce");
		veggies.add("Bean");
		veggies.add("Gourd");
		System.out.println("\nVeggies List :- \n" + veggies);


		// Merging 2 lists - add veggies to fruits list
		Collections.addAll(fruits, veggies.stream().toArray(String[]::new));


		// print merged list to the console
		System.out.println("\nMerged List :- \n" + fruits);
	}
}

Output:

Fruit List :- 
[Apple, Mango, Grape, Cherry, Melon]

Veggies List :- 
[Carrot, Radish, Lettuce, Bean, Gourd]

Merged List :- 
[Apple, Mango, Grape, Cherry, Melon, Carrot, Radish, Lettuce, Bean, Gourd]

5. Using addAll() method of Collection interface

  • This is very much same like above example 4 where it uses addAll() method of Collection interface to add all elements of 2nd list to the 1st list

MergeListUsingCollectionsAddAllMethod2.java

package in.bench.resources.java8.merge.list;

import java.util.ArrayList;
import java.util.List;

public class MergeListUsingCollectionsAddAllMethod2 {

	public static void main(String[] args) {

		// list 1 - fruits
		List<String> fruits = new ArrayList<>();
		fruits.add("Apple");
		fruits.add("Mango");
		fruits.add("Grape");
		fruits.add("Cherry");
		fruits.add("Melon");
		System.out.println("Fruit List :- \n" + fruits);


		// list 2 - vegetables
		List<String> veggies = new ArrayList<>();
		veggies.add("Carrot");
		veggies.add("Radish");
		veggies.add("Lettuce");
		veggies.add("Bean");
		veggies.add("Gourd");
		System.out.println("\nVeggies List :- \n" + veggies);


		// Merging 2 lists - add veggies to fruits list
		fruits.addAll(veggies);


		// print merged list to the console
		System.out.println("\nMerged List :- \n" + fruits);
	}
}

Output:

Fruit List :- 
[Apple, Mango, Grape, Cherry, Melon]

Veggies List :- 
[Carrot, Radish, Lettuce, Bean, Gourd]

Merged List :- 
[Apple, Mango, Grape, Cherry, Melon, Carrot, Radish, Lettuce, Bean, Gourd]

6. Using Iterator interface

  • This is the very old technique where the 2nd list is iterated using Iterator interface and added to 1st list one-by-one

MergeListUsingIterator.java

package in.bench.resources.java8.merge.list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class MergeListUsingIterator {

	public static void main(String[] args) {

		// list 1 - fruits
		List<String> fruits = new ArrayList<>();
		fruits.add("Apple");
		fruits.add("Mango");
		fruits.add("Grape");
		fruits.add("Cherry");
		fruits.add("Melon");
		System.out.println("Fruit List :- \n" + fruits);


		// list 2 - vegetables
		List<String> veggies = new ArrayList<>();
		veggies.add("Carrot");
		veggies.add("Radish");
		veggies.add("Lettuce");
		veggies.add("Bean");
		veggies.add("Gourd");
		System.out.println("\nVeggies List :- \n" + veggies);


		// Merging 2 lists by Iterating
		Iterator<String> iterator = veggies.iterator();
		while(iterator.hasNext()) {

			// add veggies to fruits List one-by-one
			fruits.add(iterator.next());
		}


		// print merged list to the console
		System.out.println("\nMerged List :- \n" + fruits);
	}
}

Output:

Fruit List :- 
[Apple, Mango, Grape, Cherry, Melon]

Veggies List :- 
[Carrot, Radish, Lettuce, Bean, Gourd]

Merged List :- 
[Apple, Mango, Grape, Cherry, Melon, Carrot, Radish, Lettuce, Bean, Gourd]

7. Using forEach loop

  • This is very much same like above example 6 where 2nd list elements are iterated using forEach loop and added to 1st list

MergeListUsingForEachLoop.java

package in.bench.resources.java8.merge.list;

import java.util.ArrayList;
import java.util.List;

public class MergeListUsingForEachLoop {

	public static void main(String[] args) {

		// list 1 - fruits
		List<String> fruits = new ArrayList<>();
		fruits.add("Apple");
		fruits.add("Mango");
		fruits.add("Grape");
		fruits.add("Cherry");
		fruits.add("Melon");
		System.out.println("Fruit List :- \n" + fruits);


		// list 2 - vegetables
		List<String> veggies = new ArrayList<>();
		veggies.add("Carrot");
		veggies.add("Radish");
		veggies.add("Lettuce");
		veggies.add("Bean");
		veggies.add("Gourd");
		System.out.println("\nVeggies List :- \n" + veggies);


		// Merging 2 lists by Iterating
		for(String veggie : veggies) {

			// add veggies to fruits List one-by-one
			fruits.add(veggie);
		}


		// print merged list to the console
		System.out.println("\nMerged List :- \n" + fruits);
	}
}

Output:

Fruit List :- 
[Apple, Mango, Grape, Cherry, Melon]

Veggies List :- 
[Carrot, Radish, Lettuce, Bean, Gourd]

Merged List :- 
[Apple, Mango, Grape, Cherry, Melon, Carrot, Radish, Lettuce, Bean, Gourd]

Related Articles:

References:

Happy Coding !!
Happy Learning !!

Java - How to add/remove/modify an element in List while iterating ?
Java 8 - How to get sub-string from a String ?