//-------------------------------------------------------------------------
        private static CurrencyParameterSensitivity buildSensitivities(Curve bumpedCurve, ImmutableRatesProvider ratesProvider)
        {
//JAVA TO C# CONVERTER TODO TASK: Most Java stream collectors are not converted by Java to C# Converter:
            RatesProvider                  bumpedRatesProvider = ratesProvider.toBuilder().discountCurves(ratesProvider.DiscountCurves.Keys.collect(toImmutableMap(System.Func.identity(), k => bumpedCurve))).indexCurves(ratesProvider.IndexCurves.Keys.collect(toImmutableMap(System.Func.identity(), k => bumpedCurve))).build();
            PointSensitivities             pointSensitivities  = PRICER_SWAP.presentValueSensitivity(SWAP, bumpedRatesProvider).build();
            CurrencyParameterSensitivities paramSensitivities  = bumpedRatesProvider.parameterSensitivity(pointSensitivities);

            return(Iterables.getOnlyElement(paramSensitivities.Sensitivities));
        }
        // Checks that different finite difference types and shifts give similar results.
        public virtual void semiParallelGammaCoherency()
        {
            ImmutableRatesProvider provider          = SINGLE;
            Curve                curve               = Iterables.getOnlyElement(provider.DiscountCurves.values());
            Currency             curveCurrency       = SINGLE_CURRENCY;
            double               toleranceCoherency  = 1.0E+5;
            CurveGammaCalculator calculatorForward5  = CurveGammaCalculator.ofForwardDifference(FD_SHIFT);
            CurveGammaCalculator calculatorBackward5 = CurveGammaCalculator.ofBackwardDifference(FD_SHIFT);
            CurveGammaCalculator calculatorCentral4  = CurveGammaCalculator.ofCentralDifference(1.0E-4);
            DoubleArray          gammaCentral5       = GAMMA_CAL.calculateSemiParallelGamma(curve, curveCurrency, c => buildSensitivities(c, provider)).Sensitivity;

            DoubleArray gammaForward5 = calculatorForward5.calculateSemiParallelGamma(curve, curveCurrency, c => buildSensitivities(c, provider)).Sensitivity;

            assertTrue(gammaForward5.equalWithTolerance(gammaCentral5, toleranceCoherency));

            DoubleArray gammaBackward5 = calculatorBackward5.calculateSemiParallelGamma(curve, curveCurrency, c => buildSensitivities(c, provider)).Sensitivity;

            assertTrue(gammaForward5.equalWithTolerance(gammaBackward5, toleranceCoherency));

            DoubleArray gammaCentral4 = calculatorCentral4.calculateSemiParallelGamma(curve, curveCurrency, c => buildSensitivities(c, provider)).Sensitivity;

            assertTrue(gammaForward5.equalWithTolerance(gammaCentral4, toleranceCoherency));
        }