Skip to content

Commit 61c51da

Browse files
authored
NOJIRA generaliserer og bruker SegmentCombinator som parameter (#20)
1 parent 1a4bc09 commit 61c51da

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

src/main/java/no/nav/fpsak/tidsserie/LocalDateTimeline.java

+11-11
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ public <T, R> LocalDateTimeline<R> combine(final LocalDateTimeline<T> other, fin
215215
* for å 'redusere' tidslinjen ned til enkleste form før lagring etc.
216216
*/
217217
public LocalDateTimeline<V> compress() {
218-
var factory = new CompressorFactory<V>(Objects::equals, LocalDateSegment::new);
218+
var factory = new CompressorFactory<V>(Objects::equals, (i, lhs, rhs) -> new LocalDateSegment<>(i, lhs.getValue()));
219219
TimelineCompressor<V> compressor = segments.stream()
220220
.collect(factory::get, TimelineCompressor::accept, TimelineCompressor::combine);
221221

@@ -225,9 +225,9 @@ public LocalDateTimeline<V> compress() {
225225
/**
226226
* Fikser opp tidslinjen ved å slå sammen sammenhengende intervall med "like" verider utover periode.
227227
* @param e - likhetspredikat for å sammenligne to segment som vurderes slått sammen
228-
* @param c - konstruktør som tar nytt intervall og gammel verdi og lager et nytt segment
228+
* @param c - combinator for å slå sammen to tids-abut-segmenter som oppfyller e
229229
*/
230-
public LocalDateTimeline<V> compress(BiPredicate<V, V> e, BiFunction<LocalDateInterval, V, LocalDateSegment<V>> c) {
230+
public LocalDateTimeline<V> compress(BiPredicate<V, V> e, LocalDateSegmentCombinator<V, V, V> c) {
231231
var factory = new CompressorFactory<>(e, c);
232232
TimelineCompressor<V> compressor = segments.stream()
233233
.collect(factory::get, TimelineCompressor::accept, TimelineCompressor::combine);
@@ -773,11 +773,11 @@ static class TimelineCompressor<V> implements Consumer<LocalDateSegment<V>> {
773773

774774
private final NavigableSet<LocalDateSegment<V>> segmenter = new TreeSet<>();
775775
private final BiPredicate<V, V> equals;
776-
private final BiFunction<LocalDateInterval, V, LocalDateSegment<V>> construct;
776+
private final LocalDateSegmentCombinator<V, V, V> combinator;
777777

778-
TimelineCompressor(BiPredicate<V, V> e, BiFunction<LocalDateInterval, V, LocalDateSegment<V>> c) {
778+
TimelineCompressor(BiPredicate<V, V> e, LocalDateSegmentCombinator<V, V, V> c) {
779779
this.equals = e;
780-
this.construct = c;
780+
this.combinator =c;
781781
}
782782

783783
@Override
@@ -791,7 +791,7 @@ public void accept(LocalDateSegment<V> t) {
791791
// bytt ut og ekspander intervall for siste
792792
segmenter.remove(last);
793793
LocalDateInterval expandedInterval = last.getLocalDateInterval().expand(t.getLocalDateInterval());
794-
segmenter.add(construct.apply(expandedInterval, last.getValue()));
794+
segmenter.add(new LocalDateSegment<>(expandedInterval, combinator.combine(expandedInterval, last, t).getValue()));
795795
} else {
796796
segmenter.add(t);
797797
}
@@ -806,15 +806,15 @@ public void combine(@SuppressWarnings("unused") TimelineCompressor<V> other) {
806806

807807
static class CompressorFactory<V> {
808808
private final BiPredicate<V, V> equals;
809-
private final BiFunction<LocalDateInterval, V, LocalDateSegment<V>> construct;
809+
private final LocalDateSegmentCombinator<V, V, V> combinator;
810810

811-
CompressorFactory(BiPredicate<V, V> e, BiFunction<LocalDateInterval, V, LocalDateSegment<V>> c) {
811+
CompressorFactory(BiPredicate<V, V> e, LocalDateSegmentCombinator<V, V, V> c) {
812812
this.equals = e;
813-
this.construct = c;
813+
this.combinator = c;
814814
}
815815

816816
TimelineCompressor<V> get() {
817-
return new TimelineCompressor<>(equals, construct);
817+
return new TimelineCompressor<>(equals, combinator);
818818
}
819819
}
820820

src/test/java/no/nav/fpsak/tidsserie/LocalDateTimelineTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,11 @@ public void skal_compress_en_tidsserie_med_sammenhengende_intervaller_med_samme_
135135
assertThat(timeline.size()).isEqualTo(2);
136136

137137
// Act
138-
LocalDateTimeline<String> compressedTimeline = timeline.compress(String::equals, (i, v) -> new LocalDateSegment<>(i, v + "*2"));
138+
LocalDateTimeline<String> compressedTimeline = timeline.compress(String::equals, (i, v1,v2) -> new LocalDateSegment<>(i, v1.getValue()+"*"+v2.getValue()));
139139

140140
// Assert
141141
assertThat(compressedTimeline.size()).isEqualTo(1);
142-
assertThat(compressedTimeline).isEqualTo(new LocalDateTimeline<>(d1, d4, "hello*2"));
142+
assertThat(compressedTimeline).isEqualTo(new LocalDateTimeline<>(d1, d4, "hello*hello"));
143143

144144
}
145145

0 commit comments

Comments
 (0)