diff --git a/core-java/pom.xml b/core-java/pom.xml index 78338fc439..73b1c22ed8 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -391,7 +391,7 @@ 1.1.7 - 21.0 + 22.0 3.5 1.55 1.10 diff --git a/core-java/src/test/java/com/baeldung/stream/StreamToImmutableTest.java b/core-java/src/test/java/com/baeldung/stream/StreamToImmutableTest.java new file mode 100644 index 0000000000..d267bd6406 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/stream/StreamToImmutableTest.java @@ -0,0 +1,69 @@ +package com.baeldung.stream; + +import static java.util.stream.Collectors.collectingAndThen; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toSet; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.stream.IntStream; + +import org.junit.Test; + +import com.baeldung.stream.mycollectors.MyImmutableListCollector; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; + +public class StreamToImmutableTest { + + @Test + public void whenUsingCollectingToImmutableSet_thenSuccess() { + Set mutableSet = new HashSet<>(Arrays.asList("a", "b", "c")); + mutableSet.add("test"); + Set immutableSet = mutableSet.stream() + .collect(collectingAndThen(toSet(), ImmutableSet::copyOf)); + + System.out.println(immutableSet.getClass()); + } + + @Test + public void whenUsingCollectingToUnmodifiableList_thenSuccess() { + List givenList = new ArrayList<>(Arrays.asList("a", "b", "c")); + List result = givenList.stream() + .collect(collectingAndThen(toList(), Collections::unmodifiableList)); + + System.out.println(result.getClass()); + } + + @Test + public void whenCollectToImmutableList_thenSuccess() { + List list = IntStream.range(0, 9) + .boxed() + .collect(ImmutableList.toImmutableList()); + + System.out.println(list.getClass()); + } + + @Test + public void whenCollectToMyImmutableListCollector_thenSuccess() { + List givenList = Arrays.asList("a", "b", "c", "d"); + List result = givenList.stream() + .collect(MyImmutableListCollector.toImmutableList()); + + System.out.println(result.getClass()); + } + + @Test + public void whenPassingSupplier_thenSuccess() { + List givenList = Arrays.asList("a", "b", "c", "d"); + List result = givenList.stream() + .collect(MyImmutableListCollector.toImmutableList(LinkedList::new)); + + System.out.println(result.getClass()); + } +} diff --git a/core-java/src/test/java/com/baeldung/stream/mycollectors/MyImmutableListCollector.java b/core-java/src/test/java/com/baeldung/stream/mycollectors/MyImmutableListCollector.java new file mode 100644 index 0000000000..cf6b3601c3 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/stream/mycollectors/MyImmutableListCollector.java @@ -0,0 +1,22 @@ +package com.baeldung.stream.mycollectors; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Supplier; +import java.util.stream.Collector; + +public class MyImmutableListCollector { + + public static > Collector> toImmutableList(Supplier supplier) { + return Collector.of(supplier, List::add, (left, right) -> { + left.addAll(right); + return left; + }, Collections::unmodifiableList); + } + + public static Collector, List> toImmutableList() { + return toImmutableList(ArrayList::new); + } + +}