Search code examples
javahashmapreport

Hash maps to link several domains into one report - Java Eclipse


I am new to Java and am using Java Eclipse, so please be kind! I hope I'm going to pose this question correctly so it makes sense.

I have four domains - each domain is pulling data from four different servers, hence the need to have them separate. But now I need to create a report that links all the data from the four domains into one report. Someone suggested using hashmaps, which I haven't used before. My four domains each have two fields that can be used as a key - CostCenter and Serial. The data being pulled is from machines all over the country. I need all the data for each machine in one report.

This is all being added to an existing project that creates a webpage with tabs for the user to click on for various tables and get data specific to a location, or to create a report for each page for all machines/locations. I just need to add a new link for the user to click on that will create this spreadsheet for them.

I've already created the domains (DAO, DAOImpl, DTO, and so on) and then I was going to create the combined report in my MainService.java. Here are the domains (lists) as declared in my MainService:

public List<Volume> getVolumeReport();

public List<BadFmPumps> getBadFmPumpsReport();

public List<BadCorobPumps> getBadCorobPumpsReport();

public List<McService> getMcServiceReport();

And here is data being pulled from the databases for each of them (domains):

public class Volume {

private String costCenter;
private String DAD;
private String division;
private String model; 
private String serial;
private String numDispensers;
private String colorantSys;
private String CCEGals2017;
private String BACGals2017;
private String CCEGals2018;
private String BACGals2018;
private String DNR2017;
private String DNR2018;
private String DNR2019; 

public class BadFmPumps {

private String costCenter; 
private String model; 
private String serial; 
private String badFmPumps;  
private String over10;
private String under10;

public class BadCorobPumps {

private String costCenter; 
private String model; 
private String serial; 
private String badPumpCount;  

public class McService {

private String costCenter; 
private String model; 
private String serial; 
private String crChargeTotals; 
private String emgCalls; 

So I need to pull this data into one report wherever CostCenter + Serial matches. How do I declare the hashmaps for each object and how do I declare the key?

EDIT ----

I think I have something close here with

public List<Volume> getVolumeReport();

Map<String, Volume> VolumeMap = new HashMap<String, Volume>();

for (Volume dispenser : VolumeList)

{

String volumeKey = new StringBuilder().append(Volume.getCostCenter()).append(Volume.getSerial()).toString();

VolumeMap.put(volumeKey, dispenser);

}

Is this correct? I am getting one syntax error - the Map declaration

Map<String, Volume> VolumeMap = new HashMap<String, Volume>(); 

is giving me the error

Syntax error on token ";", { expected after this token

Is there something I need to change there?


Solution

  • There are some unusual things in your code. My guess is that you came from C# you are not using proper naming conventions see it here: https://www.oracle.com/technetwork/java/codeconventions-135099.html

    You defined your method wrong, the error is not in the Map but the method definition

    public List<Volume> getVolumeReport(); <-------- this
    

    Should be

    public List<Volume> getVolumeReport() {
    

    And then close your method at its end (using }).

    And inside your FOR you trying to direct access the Volume methods when you should use the variable you created: dispenser

    String volumeKey = new StringBuilder()
                               .append(Volume.getCostCenter())
                               .append(Volume.getSerial())
                               .toString();
    

    Should be

    String volumeKey = new StringBuilder()
                               .append(dispenser.getCostCenter())
                               .append(dispenser.getSerial())
                               .toString();