18
18
import com .optimizely .ab .annotations .VisibleForTesting ;
19
19
import com .optimizely .ab .config .*;
20
20
import java .util .*;
21
- import java .util .function .Function ;
22
- import java .util .stream .Collectors ;
23
21
24
22
public class OptimizelyConfigService {
25
23
@@ -56,7 +54,11 @@ Map<String, List<FeatureVariable>> generateFeatureKeyToVariablesMap() {
56
54
if (featureFlags == null ) {
57
55
return Collections .emptyMap ();
58
56
}
59
- return featureFlags .stream ().collect (Collectors .toMap (FeatureFlag ::getKey , featureFlag -> featureFlag .getVariables ()));
57
+ Map <String , List <FeatureVariable >> featureVariableIdMap = new HashMap <>();
58
+ for (FeatureFlag featureFlag : featureFlags ) {
59
+ featureVariableIdMap .put (featureFlag .getKey (), featureFlag .getVariables ());
60
+ }
61
+ return featureVariableIdMap ;
60
62
}
61
63
62
64
@ VisibleForTesting
@@ -68,28 +70,36 @@ String getExperimentFeatureKey(String experimentId) {
68
70
@ VisibleForTesting
69
71
Map <String , OptimizelyExperiment > getExperimentsMap () {
70
72
List <Experiment > experiments = projectConfig .getExperiments ();
71
- if (experiments == null ) {
73
+ if (experiments == null ) {
72
74
return Collections .emptyMap ();
73
75
}
74
- return experiments .stream ().collect (Collectors .toMap (Experiment ::getKey , experiment -> new OptimizelyExperiment (
75
- experiment .getId (),
76
- experiment .getKey (),
77
- getVariationsMap (experiment .getVariations (), experiment .getId ())
78
- )));
76
+ Map <String , OptimizelyExperiment > featureExperimentMap = new HashMap <>();
77
+ for (Experiment experiment : experiments ) {
78
+ featureExperimentMap .put (experiment .getKey (), new OptimizelyExperiment (
79
+ experiment .getId (),
80
+ experiment .getKey (),
81
+ getVariationsMap (experiment .getVariations (), experiment .getId ())
82
+ ));
83
+ }
84
+ return featureExperimentMap ;
79
85
}
80
86
81
87
@ VisibleForTesting
82
88
Map <String , OptimizelyVariation > getVariationsMap (List <Variation > variations , String experimentId ) {
83
- if (variations == null ) {
89
+ if (variations == null ) {
84
90
return Collections .emptyMap ();
85
91
}
86
92
Boolean isFeatureExperiment = this .getExperimentFeatureKey (experimentId ) != null ;
87
- return variations .stream ().collect (Collectors .toMap (Variation ::getKey , variation -> new OptimizelyVariation (
88
- variation .getId (),
89
- variation .getKey (),
90
- isFeatureExperiment ? variation .getFeatureEnabled () : null ,
91
- getMergedVariablesMap (variation , experimentId )
92
- )));
93
+ Map <String , OptimizelyVariation > variationKeyMap = new HashMap <>();
94
+ for (Variation variation : variations ) {
95
+ variationKeyMap .put (variation .getKey (), new OptimizelyVariation (
96
+ variation .getId (),
97
+ variation .getKey (),
98
+ isFeatureExperiment ? variation .getFeatureEnabled () : null ,
99
+ getMergedVariablesMap (variation , experimentId )
100
+ ));
101
+ }
102
+ return variationKeyMap ;
93
103
}
94
104
95
105
/**
@@ -115,43 +125,58 @@ Map<String, OptimizelyVariable> getMergedVariablesMap(Variation variation, Strin
115
125
return Collections .emptyMap ();
116
126
}
117
127
118
- return featureVariables .stream ().collect (Collectors .toMap (FeatureVariable ::getKey , featureVariable -> new OptimizelyVariable (
119
- featureVariable .getId (),
120
- featureVariable .getKey (),
121
- featureVariable .getType ().getVariableType ().toLowerCase (),
122
- variation .getFeatureEnabled () && tempVariableIdMap .get (featureVariable .getId ()) != null
123
- ? tempVariableIdMap .get (featureVariable .getId ()).getValue ()
124
- : featureVariable .getDefaultValue ()
125
- )));
128
+ Map <String , OptimizelyVariable > featureVariableKeyMap = new HashMap <>();
129
+ for (FeatureVariable featureVariable : featureVariables ) {
130
+ featureVariableKeyMap .put (featureVariable .getKey (), new OptimizelyVariable (
131
+ featureVariable .getId (),
132
+ featureVariable .getKey (),
133
+ featureVariable .getType ().getVariableType ().toLowerCase (),
134
+ variation .getFeatureEnabled () && tempVariableIdMap .get (featureVariable .getId ()) != null
135
+ ? tempVariableIdMap .get (featureVariable .getId ()).getValue ()
136
+ : featureVariable .getDefaultValue ()
137
+ ));
138
+ }
139
+ return featureVariableKeyMap ;
126
140
}
127
141
return Collections .emptyMap ();
128
142
}
129
143
130
144
@ VisibleForTesting
131
145
Map <String , OptimizelyVariable > getFeatureVariableUsageInstanceMap (List <FeatureVariableUsageInstance > featureVariableUsageInstances ) {
132
- if (featureVariableUsageInstances == null ) {
146
+ if (featureVariableUsageInstances == null ) {
133
147
return Collections .emptyMap ();
134
148
}
135
- return featureVariableUsageInstances .stream ().collect (Collectors .toMap (FeatureVariableUsageInstance ::getId , variable -> new OptimizelyVariable (
136
- variable .getId (),
137
- null ,
138
- null ,
139
- variable .getValue ()
140
- )));
149
+
150
+ Map <String , OptimizelyVariable > featureVariableIdMap = new HashMap <>();
151
+ for (FeatureVariableUsageInstance featureVariableUsageInstance : featureVariableUsageInstances ) {
152
+ featureVariableIdMap .put (featureVariableUsageInstance .getId (), new OptimizelyVariable (
153
+ featureVariableUsageInstance .getId (),
154
+ null ,
155
+ null ,
156
+ featureVariableUsageInstance .getValue ()
157
+ ));
158
+ }
159
+
160
+ return featureVariableIdMap ;
141
161
}
142
162
143
163
@ VisibleForTesting
144
164
Map <String , OptimizelyFeature > getFeaturesMap (Map <String , OptimizelyExperiment > allExperimentsMap ) {
145
165
List <FeatureFlag > featureFlags = projectConfig .getFeatureFlags ();
146
- if (featureFlags == null ) {
166
+ if (featureFlags == null ) {
147
167
return Collections .emptyMap ();
148
168
}
149
- return featureFlags .stream ().collect (Collectors .toMap (FeatureFlag ::getKey , featureFlag -> new OptimizelyFeature (
150
- featureFlag .getId (),
151
- featureFlag .getKey (),
152
- getExperimentsMapForFeature (featureFlag .getExperimentIds (), allExperimentsMap ),
153
- getFeatureVariablesMap (featureFlag .getVariables ())
154
- )));
169
+
170
+ Map <String , OptimizelyFeature > optimizelyFeatureKeyMap = new HashMap <>();
171
+ for (FeatureFlag featureFlag : featureFlags ) {
172
+ optimizelyFeatureKeyMap .put (featureFlag .getKey (), new OptimizelyFeature (
173
+ featureFlag .getId (),
174
+ featureFlag .getKey (),
175
+ getExperimentsMapForFeature (featureFlag .getExperimentIds (), allExperimentsMap ),
176
+ getFeatureVariablesMap (featureFlag .getVariables ())
177
+ ));
178
+ }
179
+ return optimizelyFeatureKeyMap ;
155
180
}
156
181
157
182
@ VisibleForTesting
@@ -160,23 +185,31 @@ Map<String, OptimizelyExperiment> getExperimentsMapForFeature(List<String> exper
160
185
return Collections .emptyMap ();
161
186
}
162
187
163
- List <String > experimentKeys = experimentIds .stream ()
164
- .map (experimentId -> projectConfig .getExperimentIdMapping ().get (experimentId ).getKey ())
165
- .collect (Collectors .toList ());
188
+ Map <String , OptimizelyExperiment > optimizelyExperimentKeyMap = new HashMap <>();
189
+ for (String experimentId : experimentIds ) {
190
+ String experimentKey = projectConfig .getExperimentIdMapping ().get (experimentId ).getKey ();
191
+ optimizelyExperimentKeyMap .put (experimentKey , allExperimentsMap .get (experimentKey ));
192
+ }
166
193
167
- return experimentKeys . stream (). collect ( Collectors . toMap ( Function . identity (), key -> allExperimentsMap . get ( key ))) ;
194
+ return optimizelyExperimentKeyMap ;
168
195
}
169
196
170
197
@ VisibleForTesting
171
198
Map <String , OptimizelyVariable > getFeatureVariablesMap (List <FeatureVariable > featureVariables ) {
172
199
if (featureVariables == null ) {
173
200
return Collections .emptyMap ();
174
201
}
175
- return featureVariables .stream ().collect (Collectors .toMap (FeatureVariable ::getKey , featureVariable -> new OptimizelyVariable (
176
- featureVariable .getId (),
177
- featureVariable .getKey (),
178
- featureVariable .getType ().getVariableType ().toLowerCase (),
179
- featureVariable .getDefaultValue ()
180
- )));
202
+
203
+ Map <String , OptimizelyVariable > featureVariableKeyMap = new HashMap <>();
204
+ for (FeatureVariable featureVariable : featureVariables ) {
205
+ featureVariableKeyMap .put (featureVariable .getKey (), new OptimizelyVariable (
206
+ featureVariable .getId (),
207
+ featureVariable .getKey (),
208
+ featureVariable .getType ().getVariableType ().toLowerCase (),
209
+ featureVariable .getDefaultValue ()
210
+ ));
211
+ }
212
+
213
+ return featureVariableKeyMap ;
181
214
}
182
215
}
0 commit comments