Skip to content

Commit deb79bb

Browse files
yasin3061maibin
authored andcommitted
BAEL-887 How to collect a Java Stream to an immutable collection? (eugenp#2339)
* BAEL-900 Guide to dynamic tests in Junit 5 * BAEL-900 Guide to Dynamic Tests in Junit 5 * Revert "BAEL-900 Guide to Dynamic Tests in Junit 5" This reverts commit d0d45c9. * BAEL-900 Guide to Dynamic Tests in Junit 5 * BAEL-900 Guide to dynamic tests in Junit 5 * removed unnecessary annotation * BAEL-900 unused imports removed * BAEL-900 simplified input generator code * BAEL-252 A Java Client to consume a WebSockets API * BAEL-887 How to collect a Java Stream to an immutable collection?
1 parent 6bfd4d3 commit deb79bb

3 files changed

Lines changed: 92 additions & 1 deletion

File tree

core-java/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@
391391
<logback.version>1.1.7</logback.version>
392392

393393
<!-- util -->
394-
<guava.version>21.0</guava.version>
394+
<guava.version>22.0</guava.version>
395395
<commons-lang3.version>3.5</commons-lang3.version>
396396
<bouncycastle.version>1.55</bouncycastle.version>
397397
<commons-codec.version>1.10</commons-codec.version>
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.baeldung.stream;
2+
3+
import static java.util.stream.Collectors.collectingAndThen;
4+
import static java.util.stream.Collectors.toList;
5+
import static java.util.stream.Collectors.toSet;
6+
7+
import java.util.ArrayList;
8+
import java.util.Arrays;
9+
import java.util.Collections;
10+
import java.util.HashSet;
11+
import java.util.LinkedList;
12+
import java.util.List;
13+
import java.util.Set;
14+
import java.util.stream.IntStream;
15+
16+
import org.junit.Test;
17+
18+
import com.baeldung.stream.mycollectors.MyImmutableListCollector;
19+
import com.google.common.collect.ImmutableList;
20+
import com.google.common.collect.ImmutableSet;
21+
22+
public class StreamToImmutableTest {
23+
24+
@Test
25+
public void whenUsingCollectingToImmutableSet_thenSuccess() {
26+
Set<String> mutableSet = new HashSet<>(Arrays.asList("a", "b", "c"));
27+
mutableSet.add("test");
28+
Set<String> immutableSet = mutableSet.stream()
29+
.collect(collectingAndThen(toSet(), ImmutableSet::copyOf));
30+
31+
System.out.println(immutableSet.getClass());
32+
}
33+
34+
@Test
35+
public void whenUsingCollectingToUnmodifiableList_thenSuccess() {
36+
List<String> givenList = new ArrayList<>(Arrays.asList("a", "b", "c"));
37+
List<String> result = givenList.stream()
38+
.collect(collectingAndThen(toList(), Collections::unmodifiableList));
39+
40+
System.out.println(result.getClass());
41+
}
42+
43+
@Test
44+
public void whenCollectToImmutableList_thenSuccess() {
45+
List<Integer> list = IntStream.range(0, 9)
46+
.boxed()
47+
.collect(ImmutableList.toImmutableList());
48+
49+
System.out.println(list.getClass());
50+
}
51+
52+
@Test
53+
public void whenCollectToMyImmutableListCollector_thenSuccess() {
54+
List<String> givenList = Arrays.asList("a", "b", "c", "d");
55+
List<String> result = givenList.stream()
56+
.collect(MyImmutableListCollector.toImmutableList());
57+
58+
System.out.println(result.getClass());
59+
}
60+
61+
@Test
62+
public void whenPassingSupplier_thenSuccess() {
63+
List<String> givenList = Arrays.asList("a", "b", "c", "d");
64+
List<String> result = givenList.stream()
65+
.collect(MyImmutableListCollector.toImmutableList(LinkedList::new));
66+
67+
System.out.println(result.getClass());
68+
}
69+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.baeldung.stream.mycollectors;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
import java.util.function.Supplier;
7+
import java.util.stream.Collector;
8+
9+
public class MyImmutableListCollector {
10+
11+
public static <T, A extends List<T>> Collector<T, A, List<T>> toImmutableList(Supplier<A> supplier) {
12+
return Collector.of(supplier, List::add, (left, right) -> {
13+
left.addAll(right);
14+
return left;
15+
}, Collections::unmodifiableList);
16+
}
17+
18+
public static <T> Collector<T, List<T>, List<T>> toImmutableList() {
19+
return toImmutableList(ArrayList::new);
20+
}
21+
22+
}

0 commit comments

Comments
 (0)