-
Notifications
You must be signed in to change notification settings - Fork 8
/
JoinFlowBuilder.java
33 lines (28 loc) · 1.44 KB
/
JoinFlowBuilder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.fluxtion.compiler.builder.dataflow;
import com.fluxtion.runtime.dataflow.Tuple;
import com.fluxtion.runtime.dataflow.groupby.InnerJoin;
import com.fluxtion.runtime.dataflow.groupby.LeftJoin;
import com.fluxtion.runtime.dataflow.groupby.OuterJoin;
import com.fluxtion.runtime.dataflow.groupby.RightJoin;
public interface JoinFlowBuilder {
static <K1, V1, K2 extends K1, V2> GroupByFlowBuilder<K1, Tuple<V1, V2>> innerJoin(
GroupByFlowBuilder<K1, V1> leftGroupBy,
GroupByFlowBuilder<K2, V2> rightGroupBy) {
return leftGroupBy.mapBiFunction(new InnerJoin()::join, rightGroupBy);
}
static <K1, V1, K2 extends K1, V2> GroupByFlowBuilder<K1, Tuple<V1, V2>> outerJoin(
GroupByFlowBuilder<K1, V1> leftGroupBy,
GroupByFlowBuilder<K2, V2> rightGroupBy) {
return leftGroupBy.mapBiFunction(new OuterJoin()::join, rightGroupBy);
}
static <K1, V1, K2 extends K1, V2> GroupByFlowBuilder<K1, Tuple<V1, V2>> leftJoin(
GroupByFlowBuilder<K1, V1> leftGroupBy,
GroupByFlowBuilder<K2, V2> rightGroupBy) {
return leftGroupBy.mapBiFunction(new LeftJoin()::join, rightGroupBy);
}
static <K1, V1, K2 extends K1, V2> GroupByFlowBuilder<K1, Tuple<V1, V2>> rightJoin(
GroupByFlowBuilder<K1, V1> leftGroupBy,
GroupByFlowBuilder<K2, V2> rightGroupBy) {
return leftGroupBy.mapBiFunction(new RightJoin()::join, rightGroupBy);
}
}