Skip to content

Commit

Permalink
Stream spare parts to speed up calculations
Browse files Browse the repository at this point in the history
  • Loading branch information
sixlettervariables committed Jan 22, 2020
1 parent 21d2f0f commit 51ffcd3
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 10 deletions.
18 changes: 10 additions & 8 deletions MekHQ/src/mekhq/campaign/Campaign.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import javax.swing.JOptionPane;

Expand Down Expand Up @@ -3932,6 +3933,10 @@ public ArrayList<Part> getSpareParts() {
return spares;
}

public Stream<Part> streamSpareParts() {
return parts.values().stream().filter(Part::isSpare);
}

public void addFunds(Money quantity) {
addFunds(quantity, "Rich Uncle", Transaction.C_MISC);
}
Expand Down Expand Up @@ -6948,7 +6953,7 @@ public PartInventory getPartInventory(Part part) {
public Money getTotalEquipmentValue() {
return Money.zero()
.plus(getUnits().stream().map(Unit::getSellValue).collect(Collectors.toList()))
.plus(getSpareParts().stream().map(Part::getActualValue).collect(Collectors.toList()));
.plus(streamSpareParts().map(Part::getActualValue).collect(Collectors.toList()));
}

/**
Expand Down Expand Up @@ -7396,7 +7401,7 @@ public double getCargoTonnage(boolean inTransit) {
}

@SuppressWarnings("unused") // FIXME: This whole method needs re-worked once Dropship Assignments are in
public double getCargoTonnage(boolean inTransit, boolean mothballed) {
public double getCargoTonnage(final boolean inTransit, final boolean mothballed) {
double cargoTonnage = 0;
double mothballedTonnage = 0;
int mechs = getNumberOfUnitsByType(Entity.ETYPE_MECH);
Expand All @@ -7410,12 +7415,9 @@ public double getCargoTonnage(boolean inTransit, boolean mothballed) {
int hv = getNumberOfUnitsByType(Entity.ETYPE_TANK, false);
int protos = getNumberOfUnitsByType(Entity.ETYPE_PROTOMECH);

for (Part part : getSpareParts()) {
if (!inTransit && !part.isPresent()) {
continue;
}
cargoTonnage += (part.getQuantity() * part.getTonnage());
}
cargoTonnage += streamSpareParts().filter(p -> inTransit || p.isPresent())
.mapToDouble(p -> p.getQuantity() * p.getTonnage())
.sum();

// place units in bays
// FIXME: This has been temporarily disabled. It really needs dropship assignments done to fix it correctly.
Expand Down
4 changes: 2 additions & 2 deletions MekHQ/src/mekhq/campaign/finances/FinancialReport.java
Original file line number Diff line number Diff line change
Expand Up @@ -174,8 +174,8 @@ public static FinancialReport calculate(Campaign campaign) {
}

r.spareParts = r.spareParts.plus(
campaign.getSpareParts()
.stream().map(x -> x.getActualValue().multipliedBy(x.getQuantity()))
campaign.streamSpareParts()
.map(x -> x.getActualValue().multipliedBy(x.getQuantity()))
.collect(Collectors.toList()));

CampaignOptions campaignOptions = campaign.getCampaignOptions();
Expand Down

0 comments on commit 51ffcd3

Please sign in to comment.