Skip to content

Commit 3dd582c

Browse files
committed
add allReader base class
1 parent 96118a9 commit 3dd582c

1 file changed

Lines changed: 68 additions & 0 deletions

File tree

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package it.aboutbits.springboot.testing.testdata.base;
2+
3+
import lombok.NonNull;
4+
5+
import java.util.Comparator;
6+
import java.util.HashSet;
7+
import java.util.List;
8+
import java.util.Set;
9+
import java.util.function.Function;
10+
import java.util.function.Predicate;
11+
12+
public abstract class AllTestDataReader<ITEM> {
13+
public ITEM returnFirst() {
14+
return (ITEM) this.returnAll().getFirst();
15+
}
16+
17+
public List<ITEM> returnAll() {
18+
return this.fetch();
19+
}
20+
21+
@SafeVarargs
22+
public final List<ITEM> returnSorted(@NonNull Comparator<ITEM>... comparators) {
23+
if (comparators.length == 0) {
24+
throw new IllegalArgumentException("At least one comparator must be provided");
25+
}
26+
27+
var combinedComparator = comparators[0];
28+
for (var i = 1; i < comparators.length; i++) {
29+
combinedComparator = combinedComparator.thenComparing(comparators[i]);
30+
}
31+
32+
return returnAll().stream().sorted(combinedComparator).toList();
33+
}
34+
35+
@SafeVarargs
36+
@SuppressWarnings("unchecked")
37+
public final <U extends Comparable<? super U>> List<ITEM> returnSorted(@NonNull Function<ITEM, ? extends Comparable<?>>... comparators) {
38+
if (comparators.length == 0) {
39+
throw new IllegalArgumentException("At least one comparator must be provided");
40+
}
41+
42+
var combinedComparator = Comparator.comparing((Function<ITEM, U>) comparators[0]);
43+
for (var i = 1; i < comparators.length; i++) {
44+
combinedComparator = combinedComparator.thenComparing((Function<ITEM, U>) comparators[i]);
45+
}
46+
47+
return returnAll().stream().sorted(combinedComparator).toList();
48+
}
49+
50+
public <U extends Comparable<? super U>> AllAndFiltered<ITEM> returnFiltered(@NonNull Predicate<ITEM> predicate) {
51+
var all = this.returnAll();
52+
return new AllAndFiltered<ITEM>(
53+
all,
54+
all.stream().filter(predicate).toList(),
55+
all.stream().filter(item -> !predicate.test(item)).toList()
56+
);
57+
}
58+
59+
public Set<ITEM> returnSet() {
60+
return new HashSet<>(this.returnAll());
61+
}
62+
63+
protected abstract List<ITEM> fetch();
64+
65+
public record AllAndFiltered<T>(@NonNull List<T> all, @NonNull List<T> filtered, @NonNull List<T> other) {
66+
67+
}
68+
}

0 commit comments

Comments
 (0)