Skip to content

Commit 06de5b4

Browse files
authored
Merge pull request #30 from aboutbits/add-util
add collect utility
2 parents 00f22f9 + a7cb0be commit 06de5b4

File tree

2 files changed

+595
-0
lines changed

2 files changed

+595
-0
lines changed
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package it.aboutbits.springboot.toolbox.util;
2+
3+
import lombok.NonNull;
4+
import org.springframework.data.util.Streamable;
5+
6+
import java.util.Collection;
7+
import java.util.List;
8+
import java.util.Map;
9+
import java.util.Objects;
10+
import java.util.Set;
11+
import java.util.function.Function;
12+
import java.util.stream.Collectors;
13+
import java.util.stream.Stream;
14+
15+
/**
16+
* This is a collection of tools to simply collect a property to a new collection or stream.
17+
* The common usage would, for example, be to collect the ids of all items in a list to a set.
18+
* <p>
19+
* The returned collections are unmodifiable.
20+
*/
21+
public final class CollectUtil {
22+
private CollectUtil() {
23+
}
24+
25+
public static <T, R> Set<R> collectToSet(@NonNull Collection<T> items, @NonNull Function<T, R> mapper) {
26+
return items.stream()
27+
.map(mapper)
28+
.filter(Objects::nonNull)
29+
.collect(Collectors.toUnmodifiableSet());
30+
}
31+
32+
public static <T, R> Set<R> collectToSet(@NonNull Streamable<T> items, @NonNull Function<T, R> mapper) {
33+
return items.stream()
34+
.map(mapper)
35+
.filter(Objects::nonNull)
36+
.collect(Collectors.toUnmodifiableSet());
37+
}
38+
39+
public static <T, R> Set<R> collectToSet(@NonNull Stream<T> items, @NonNull Function<T, R> mapper) {
40+
return items
41+
.map(mapper)
42+
.filter(Objects::nonNull)
43+
.collect(Collectors.toUnmodifiableSet());
44+
}
45+
46+
public static <T, R> List<R> collectToList(@NonNull Collection<T> items, @NonNull Function<T, R> mapper) {
47+
return items.stream()
48+
.map(mapper)
49+
.filter(Objects::nonNull)
50+
.toList();
51+
}
52+
53+
public static <T, R> List<R> collectToList(@NonNull Streamable<T> items, @NonNull Function<T, R> mapper) {
54+
return items.stream()
55+
.map(mapper)
56+
.filter(Objects::nonNull)
57+
.toList();
58+
}
59+
60+
public static <T, R> List<R> collectToList(@NonNull Stream<T> items, @NonNull Function<T, R> mapper) {
61+
return items
62+
.map(mapper)
63+
.filter(Objects::nonNull)
64+
.toList();
65+
}
66+
67+
public static <T, R> Stream<R> collectToStream(@NonNull Collection<T> items, @NonNull Function<T, R> mapper) {
68+
return items.stream()
69+
.map(mapper)
70+
.filter(Objects::nonNull);
71+
}
72+
73+
public static <T, R> Stream<R> collectToStream(@NonNull Streamable<T> items, @NonNull Function<T, R> mapper) {
74+
return items.stream()
75+
.map(mapper)
76+
.filter(Objects::nonNull);
77+
}
78+
79+
public static <T, R> Stream<R> collectToStream(@NonNull Stream<T> items, @NonNull Function<T, R> mapper) {
80+
return items
81+
.map(mapper)
82+
.filter(Objects::nonNull);
83+
}
84+
85+
public static <T, K, R> Map<K, R> collectToMap(
86+
@NonNull Collection<T> items,
87+
@NonNull Function<T, K> keyMapper,
88+
@NonNull Function<T, R> valueMapper
89+
) {
90+
return items.stream()
91+
.filter(Objects::nonNull)
92+
.collect(Collectors.toMap(keyMapper, valueMapper));
93+
}
94+
95+
public static <T, K, R> Map<K, R> collectToMap(
96+
@NonNull Streamable<T> items,
97+
@NonNull Function<T, K> keyMapper,
98+
@NonNull Function<T, R> valueMapper
99+
) {
100+
return items.stream()
101+
.filter(Objects::nonNull)
102+
.collect(Collectors.toMap(keyMapper, valueMapper));
103+
}
104+
105+
public static <T, K, R> Map<K, R> collectToMap(
106+
@NonNull Stream<T> items,
107+
@NonNull Function<T, K> keyMapper,
108+
@NonNull Function<T, R> valueMapper
109+
) {
110+
return items
111+
.filter(Objects::nonNull)
112+
.collect(Collectors.toMap(keyMapper, valueMapper));
113+
}
114+
}

0 commit comments

Comments
 (0)