@@ -44,30 +44,26 @@ private class Repo {
44
44
45
45
Map <Object , Set <Element >> tokenElementSet ;
46
46
47
- TreeSet <Token > tokenBinaryTree ;
47
+ TreeSet <Object > tokenBinaryTree ;
48
48
49
49
Repo (MatchType matchType ) {
50
50
this .matchType = matchType ;
51
51
switch (matchType ) {
52
+ case NEAREST_NEIGHBORS :
53
+ tokenBinaryTree = new TreeSet <>();
52
54
case EQUALITY :
53
55
tokenElementSet = new ConcurrentHashMap <>();
54
- break ;
55
- case NEAREST_NEIGHBORS :
56
- tokenBinaryTree = new TreeSet <>(Token .byValue );
57
- break ;
58
56
}
59
57
}
60
58
61
59
void put (Token token , Element element ) {
62
60
switch (matchType ) {
61
+ case NEAREST_NEIGHBORS :
62
+ tokenBinaryTree .add (token .getValue ());
63
63
case EQUALITY :
64
64
Set <Element > elements = tokenElementSet .getOrDefault (token .getValue (), new HashSet <>());
65
65
elements .add (element );
66
66
tokenElementSet .put (token .getValue (), elements );
67
- break ;
68
- case NEAREST_NEIGHBORS :
69
- tokenBinaryTree .add (token );
70
-
71
67
}
72
68
}
73
69
@@ -79,7 +75,7 @@ Set<Element> get(Token token) {
79
75
TokenRange tokenRange = new TokenRange (token , token .getElement ().getNeighborhoodRange ());
80
76
return tokenBinaryTree .subSet (tokenRange .lower , true , tokenRange .higher , true )
81
77
.stream ()
82
- .map ( Token :: getElement ).collect (Collectors .toSet ());
78
+ .flatMap ( val -> tokenElementSet . get ( val ). stream () ).collect (Collectors .toSet ());
83
79
84
80
}
85
81
return null ;
@@ -88,37 +84,33 @@ Set<Element> get(Token token) {
88
84
89
85
private class TokenRange {
90
86
91
- private final Token lower ;
92
- private final Token higher ;
87
+ private final Object lower ;
88
+ private final Object higher ;
93
89
private static final double DATE_SCALE_FACTOR = 1.1 ;
94
90
95
91
96
92
TokenRange (Token token , double pct ) {
97
93
Object value = token .getValue ();
98
94
if (value instanceof Double ) {
99
- this .lower = new Token ( getLower ((Double ) value , pct ).doubleValue (), token . getElement () );
100
- this .higher = new Token ( getHigher ((Double ) value , pct ).doubleValue (), token . getElement () );
95
+ this .lower = getLower ((Double ) value , pct ).doubleValue ();
96
+ this .higher = getHigher ((Double ) value , pct ).doubleValue ();
101
97
} else if (value instanceof Integer ) {
102
- this .lower = new Token ( getLower ((Integer ) value , pct ).intValue (), token . getElement () );
103
- this .higher = new Token ( getHigher ((Integer ) value , pct ).intValue (), token . getElement () );
98
+ this .lower = getLower ((Integer ) value , pct ).intValue ();
99
+ this .higher = getHigher ((Integer ) value , pct ).intValue ();
104
100
} else if (value instanceof Long ) {
105
- this .lower = new Token ( getLower ((Long ) value , pct ).longValue (), token . getElement () );
106
- this .higher = new Token ( getHigher ((Long ) value , pct ).longValue (), token . getElement () );
101
+ this .lower = getLower ((Long ) value , pct ).longValue ();
102
+ this .higher = getHigher ((Long ) value , pct ).longValue ();
107
103
} else if (value instanceof Float ) {
108
- this .lower = new Token ( getLower ((Float ) value , pct ).floatValue (), token . getElement () );
109
- this .higher = new Token ( getHigher ((Float ) value , pct ).floatValue (), token . getElement () );
104
+ this .lower = getLower ((Float ) value , pct ).floatValue ();
105
+ this .higher = getHigher ((Float ) value , pct ).floatValue ();
110
106
} else if (value instanceof Date ) {
111
- this .lower = getDateToken (getLower (((Date ) value ).getTime (), pct * DATE_SCALE_FACTOR ), token );
112
- this .higher = getDateToken (getHigher (((Date ) value ).getTime (), pct * DATE_SCALE_FACTOR ), token );
107
+ this .lower = new Date (getLower (((Date ) value ).getTime (), pct * DATE_SCALE_FACTOR ). longValue () );
108
+ this .higher = new Date (getHigher (((Date ) value ).getTime (), pct * DATE_SCALE_FACTOR ). longValue () );
113
109
} else {
114
110
throw new MatchException ("Data Type not supported" );
115
111
}
116
112
}
117
113
118
- private Token getDateToken (Number number , Token token ) {
119
- return new Token (new Date (number .longValue ()), token .getElement ());
120
- }
121
-
122
114
private Number getLower (Number number , double pct ) {
123
115
Double dnum = number .doubleValue ();
124
116
Double pctVal = Math .abs (dnum * (1.0 - pct ));
0 commit comments