3030import org .slf4j .LoggerFactory ;
3131import javax .annotation .Nonnull ;
3232import javax .annotation .Nullable ;
33- import java .util .Collections ;
34- import java .util .HashMap ;
35- import java .util .List ;
36- import java .util .Map ;
33+ import java .util .*;
3734import java .util .concurrent .ConcurrentHashMap ;
3835
3936import static com .optimizely .ab .internal .LoggingConstants .LoggingEntityType .EXPERIMENT ;
@@ -311,7 +308,7 @@ DecisionResponse<FeatureDecision> getVariationForFeatureInRollout(@Nonnull Featu
311308 int index = 0 ;
312309 while (index < rolloutRulesLength ) {
313310
314- DecisionResponse <Map > decisionVariationResponse = getVariationFromDeliveryRule (
311+ DecisionResponse <AbstractMap . SimpleEntry > decisionVariationResponse = getVariationFromDeliveryRule (
315312 projectConfig ,
316313 featureFlag .getKey (),
317314 rollout .getExperiments (),
@@ -320,9 +317,9 @@ DecisionResponse<FeatureDecision> getVariationForFeatureInRollout(@Nonnull Featu
320317 );
321318 reasons .merge (decisionVariationResponse .getReasons ());
322319
323- Map <Variation , Boolean > response = decisionVariationResponse .getResult ();
324- Variation variation = ( Variation ) response .keySet (). toArray ()[ 0 ] ;
325- Boolean skipToEveryoneElse = response .get ( variation );
320+ AbstractMap . SimpleEntry <Variation , Boolean > response = decisionVariationResponse .getResult ();
321+ Variation variation = response .getKey () ;
322+ Boolean skipToEveryoneElse = response .getValue ( );
326323 if (variation != null ) {
327324 Experiment rule = rollout .getExperiments ().get (index );
328325 FeatureDecision featureDecision = new FeatureDecision (rule , variation , FeatureDecision .DecisionSource .ROLLOUT );
@@ -631,15 +628,14 @@ private boolean validateUserId(String userId) {
631628 * @return Returns a DecisionResponse Object containing a Pair<Variation, Boolean>
632629 * where the Variation is the result and the Boolean is the skipToEveryoneElse.
633630 */
634- DecisionResponse <Map > getVariationFromDeliveryRule (@ Nonnull ProjectConfig projectConfig ,
631+ DecisionResponse <AbstractMap . SimpleEntry > getVariationFromDeliveryRule (@ Nonnull ProjectConfig projectConfig ,
635632 @ Nonnull String flagKey ,
636633 @ Nonnull List <Experiment > rules ,
637634 @ Nonnull int ruleIndex ,
638635 @ Nonnull OptimizelyUserContext user ) {
639636 DecisionReasons reasons = DefaultDecisionReasons .newInstance ();
640637 Boolean skipToEveryoneElse = false ;
641- Map <Variation , Boolean > variationToSkipToEveryoneElse = new HashMap <>();;
642-
638+ AbstractMap .SimpleEntry <Variation , Boolean > variationToSkipToEveryoneElsePair ;
643639 // Check forced-decisions first
644640 Experiment rule = rules .get (ruleIndex );
645641 OptimizelyDecisionContext optimizelyDecisionContext = new OptimizelyDecisionContext (flagKey , rule .getKey ());
@@ -648,8 +644,8 @@ DecisionResponse<Map> getVariationFromDeliveryRule(@Nonnull ProjectConfig projec
648644
649645 Variation variation = forcedDecisionResponse .getResult ();
650646 if (variation != null ) {
651- variationToSkipToEveryoneElse . put (variation , false );
652- return new DecisionResponse (variationToSkipToEveryoneElse , reasons );
647+ variationToSkipToEveryoneElsePair = new AbstractMap . SimpleEntry <> (variation , false );
648+ return new DecisionResponse (variationToSkipToEveryoneElsePair , reasons );
653649 }
654650
655651 // Handle a regular decision
@@ -694,8 +690,8 @@ DecisionResponse<Map> getVariationFromDeliveryRule(@Nonnull ProjectConfig projec
694690 reasons .addInfo (message );
695691 logger .debug (message );
696692 }
697- variationToSkipToEveryoneElse . put (bucketedVariation , skipToEveryoneElse );
698- return new DecisionResponse (variationToSkipToEveryoneElse , reasons );
693+ variationToSkipToEveryoneElsePair = new AbstractMap . SimpleEntry <> (bucketedVariation , skipToEveryoneElse );
694+ return new DecisionResponse (variationToSkipToEveryoneElsePair , reasons );
699695 }
700696
701697}
0 commit comments