public static Map<String, List<ForwardSensitivity>> cleanedFwd( final Map<String, List<ForwardSensitivity>> map) { // TODO: improve the sorting algorithm. final Map<String, List<ForwardSensitivity>> result = new HashMap<>(); for (final Map.Entry<String, List<ForwardSensitivity>> entry : map.entrySet()) { final List<ForwardSensitivity> list = entry.getValue(); final List<ForwardSensitivity> listClean = new ArrayList<>(); final Set<Triple<Double, Double, Double>> set = new TreeSet<>(); for (final ForwardSensitivity pair : list) { set.add(new Triple<>(pair.getStartTime(), pair.getEndTime(), pair.getAccrualFactor())); } for (final Triple<Double, Double, Double> time : set) { double sensi = 0; for (int looplist = 0; looplist < list.size(); looplist++) { final ForwardSensitivity fwdSensitivity = list.get(looplist); final Triple<Double, Double, Double> triple = new Triple<>( fwdSensitivity.getStartTime(), fwdSensitivity.getEndTime(), fwdSensitivity.getAccrualFactor()); if (triple.equals(time)) { sensi += list.get(looplist).getValue(); } } listClean.add( new ForwardSensitivity(time.getFirst(), time.getSecond(), time.getThird(), sensi)); } result.put(entry.getKey(), listClean); } return result; }
public static Map<String, List<ForwardSensitivity>> multipliedByFwd( final Map<String, List<ForwardSensitivity>> map, final double factor) { final Map<String, List<ForwardSensitivity>> result = new HashMap<>(); for (final Map.Entry<String, List<ForwardSensitivity>> entry : map.entrySet()) { final List<ForwardSensitivity> curveSensi = new ArrayList<>(); for (final ForwardSensitivity pair : entry.getValue()) { curveSensi.add( new ForwardSensitivity( pair.getStartTime(), pair.getEndTime(), pair.getAccrualFactor(), pair.getValue() * factor)); } result.put(entry.getKey(), curveSensi); } return result; }
/** * Product of two sensitivities * * @param map1 the original sensitivity * @param map2 the other sensitivity * @return the new sensitivity */ public static Map<String, List<ForwardSensitivity>> productOfFwd( final Map<String, List<ForwardSensitivity>> map1, final Map<String, List<ForwardSensitivity>> map2) { final Map<String, List<ForwardSensitivity>> result = new HashMap<>(); for (final Map.Entry<String, List<ForwardSensitivity>> entry : map1.entrySet()) { final List<ForwardSensitivity> curveSensi = new ArrayList<>(); final String name = entry.getKey(); if (map2.containsKey(name)) { final int length2 = map2.size(); for (final ForwardSensitivity pair1 : entry.getValue()) { for (int i = 0; i < length2; ++i) { if (pair1.getStartTime() == map2.get(name).get(i).getStartTime() && pair1.getEndTime() == map2.get(name).get(i).getEndTime()) { curveSensi.add( new ForwardSensitivity( pair1.getStartTime(), pair1.getEndTime(), pair1.getAccrualFactor(), pair1.getValue() * map2.get(name).get(i).getValue())); } } } } result.put(entry.getKey(), curveSensi); } return result; }