CurrencyParameterSensitivity build() {
ImmutableSet<Class<?>> metadataTypes =
sensitivity.keySet().stream().map(Object::getClass).collect(toImmutableSet());
if (metadataTypes.size() == 1) {
if (TenoredParameterMetadata.class.isAssignableFrom(metadataTypes.iterator().next())) {
Map<ParameterMetadata, Double> sorted = MapStream.of(sensitivity)
.sortedKeys(Comparator.comparing(k -> ((TenoredParameterMetadata) k).getTenor()))
.toMap();
return CurrencyParameterSensitivity.of(marketDataName, currency, sorted);
}
if (DatedParameterMetadata.class.isAssignableFrom(metadataTypes.iterator().next())) {
Map<ParameterMetadata, Double> sorted = MapStream.of(sensitivity)
.sortedKeys(Comparator.comparing(k -> ((DatedParameterMetadata) k).getDate()))
.toMap();
return CurrencyParameterSensitivity.of(marketDataName, currency, sorted);
}
}
return CurrencyParameterSensitivity.of(marketDataName, currency, sensitivity);
}