/// <summary>
 /// Creates an instance.
 /// </summary>
 /// <param name="knownProvider">  the underlying known provider </param>
 /// <param name="curveDefinitions">  the curve definitions </param>
 /// <param name="curveMetadata">  the curve metadata </param>
 /// <param name="discountCurveNames">  the map of discount curves </param>
 /// <param name="forwardCurveNames">  the map of index forward curves </param>
 private ImmutableRatesProviderGenerator(ImmutableRatesProvider knownProvider, IList <CurveDefinition> curveDefinitions, IList <CurveMetadata> curveMetadata, SetMultimap <CurveName, Currency> discountCurveNames, SetMultimap <CurveName, Index> forwardCurveNames)
 {
     this.knownProvider      = ArgChecker.notNull(knownProvider, "knownProvider");
     this.curveDefinitions   = ImmutableList.copyOf(ArgChecker.notNull(curveDefinitions, "curveDefinitions"));
     this.curveMetadata      = ImmutableList.copyOf(ArgChecker.notNull(curveMetadata, "curveMetadata"));
     this.discountCurveNames = ImmutableSetMultimap.copyOf(ArgChecker.notNull(discountCurveNames, "discountCurveNames"));
     this.forwardCurveNames  = ImmutableSetMultimap.copyOf(ArgChecker.notNull(forwardCurveNames, "forwardCurveNames"));
 }
        public virtual void test_toImmutableSetMultimap_keyValue()
        {
            IList <string> list = Arrays.asList("a", "ab", "b", "bb", "c", "a");
//JAVA TO C# CONVERTER TODO TASK: Most Java stream collectors are not converted by Java to C# Converter:
            ImmutableSetMultimap <int, string>    test     = list.collect(Guavate.toImmutableSetMultimap(s => s.length(), s => "!" + s));
            ImmutableSetMultimap <object, object> expected = ImmutableSetMultimap.builder().put(1, "!a").put(2, "!ab").put(1, "!b").put(2, "!bb").put(1, "!c").build();

            assertEquals(test, expected);
        }