Skip to content

Commit

Permalink
Improve moneyLog access
Browse files Browse the repository at this point in the history
  • Loading branch information
steffenaxer committed Mar 21, 2024
1 parent affac78 commit 6a8fbf1
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 17 deletions.
6 changes: 6 additions & 0 deletions src/main/java/com/arup/cml/abm/kpi/data/MoneyLog.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.arup.cml.abm.kpi.data;

import java.util.*;
import java.util.Map.Entry;

public class MoneyLog {

Expand All @@ -14,6 +15,11 @@ public Map<Double, Double> getMoneyLogData(String personID) {
return getPersonLog(personID);
}

public double getMoneyLogData(String personID, double departureTime, double arrivalTime) {
return getPersonLog(personID).entrySet().stream()
.filter(e -> e.getKey() > departureTime && e.getKey() <= arrivalTime).mapToDouble(Entry::getValue).sum();
}

public void createMoneyLogEntry(String personID, double time, double amount) {
Map<Double, Double> personLog = getPersonLog(personID);
personLog.compute(time, (k, v) -> (v == null) ? amount : amount + v);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,6 @@
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;

import static tech.tablesaw.aggregate.AggregateFunctions.*;
Expand Down Expand Up @@ -953,19 +949,18 @@ private Table addCostToLegs(Table legs, Table personModeScores, MoneyLog moneyLo
DoubleColumn departureTimeColumn = legs.doubleColumn("dep_time_seconds");
DoubleColumn arrivalTimeColumn = legs.doubleColumn("arr_time_seconds");
StringColumn personColumn = legs.stringColumn("person");
for (Map.Entry<String, Map<Double, Double>> entry : moneyLog.getMoneyLogData().entrySet()) {
String person = entry.getKey();
for (Map.Entry<Double, Double> costEntry : entry.getValue().entrySet()) {
Double time = costEntry.getKey();
Double cost = costEntry.getValue();
monetaryCostOfTravelColumn.set(
personColumn.isEqualTo(person)
.and(departureTimeColumn.isLessThan(time)
.and(arrivalTimeColumn.isGreaterThanOrEqualTo(time))),
monetaryCostOfTravelColumn.add(cost)
);
}
}

legs.stream().parallel().forEach(row -> {
int i = row.getRowNumber();
double departureTime = departureTimeColumn.get(i);
double arrivalTime = arrivalTimeColumn.get(i);
String person = personColumn.get(i);
double costs = moneyLog.getMoneyLogData(person, departureTime, arrivalTime);
if (costs > 0) {
monetaryCostOfTravelColumn.set(i,costs);
}
});

LOGGER.debug("Finished iterating over the money log");
legs.removeColumns(dep_time_seconds, arr_time_seconds);
LOGGER.info("Finished adding costs to legs table");
Expand Down

0 comments on commit 6a8fbf1

Please sign in to comment.