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 :
- Using Stream.concat() method
- Using Stream.of() & Stream.flatMap() methods
- Using ListUtils.union() method
- Using Collections class’ utility method – Collections.addAll()
- Using addAll() method of Collection interface
- Using Iterator interface
- Using for-loop
1. Using Stream.concat() method
- There are 2 lists –
- fruit list
- veggies list
- Merge both list using Stream.concat() method which accepts 2 Stream arguments
- Collect to the new List using Stream.collect() method
- 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
- There are 2 lists –
- fruit list
- veggies list
- Merge both list using Stream.of() and Stream.flatMap() methods
- Pass both list to Stream.of() method
- Stream.flatMap() method flattens list and supplies single list which will be collected to the new List using Stream.collect() method
- Finally, print merged list to the console
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 classpath – download 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 –
- fruits list
- 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:
- Java 8 – Merging two or more Stream of elements
- Java 8 – How to Merge or Concatenate 2 Arrays using Stream API ?
- Java 8 – How to merge/concatenate/join two lists into single list ?
- Java – Merging 2 Arrays using List/Set approach
- Java – Concatenating 2 Arrays using Third Arrays approach
References:
- https://docs.oracle.com/javase/8/docs/api/java/util/List.html
- https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html
- https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html
- https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html
- https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
- https://docs.oracle.com/javase/8/docs/technotes/guides/language/foreach.html
- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4/4.4
- https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/ListUtils.html
Happy Coding !!
Happy Learning !!