How to return integer when map getOrDefault return an object

stzups :

Let's say I have a constructor for a tire that takes two integers, pressure and maxPressure

public class Tire {
  private int pressure;
  private int maxPressure;
  public Tire(int pressure, int maxPressure){
    this.pressure = pressure;
    this.maxPressure = maxPressure;
  }
  public int getPressure(){return pressure;}
  public int getMaxPressure(){return maxPressure;}
}

In my main class I can add a new Tire to a HashMap called tires with a pressure of 25 and maxPressure of 32.

public Map<String, Tire> tires = new HashMap<>;
public int defaultTirePressure = 28;
tires.put("Goodyear", new Tire(25, 30));

I want to be able get the pressure() of the Tire object if it exists or use the defaultTirePressure

//should be 25
tires.getOrDefault("Goodyear", defaultTirePressure).getPressure();

//should be 28 because there is no Michelin tire defined in tires
tires.getOrDefault("Michelin", defaultTirePressure).getPressure();

Obviously this does not work because defaultTirePressure is an integer and tires contains Tire objects.

This works, but it is kind of long:

//will set someTirePressure to 25
if(tires.containsKey("Goodyear")){
  someTirePressure = tires.getValue("Goodyear").getPressure();
}else{
  someTirePressure = defaultTirePressure;
}

//will set anotherTirePressure to 28 because there is no Michelin tire defined in tires
if(tires.containsKey("Michelin")){
  anotherTirePressure = tires.getValue("Goodyear").getPressure();
}else{
  anotherTirePressure = defaultTirePressure;
}

Is there no way to use getOrDefault in this example? I feel I may have answered my own question.

Deadpool :

Why not provide Tire object with default pressure in getOrDefault method as a default value

tires.getOrDefault("Michelin", new Tire(25, defaultTirePressure)).getPressure();

You can also have default Tire object

public final Tire defaultTire = new Tire(25,28);
tires.getOrDefault("Michelin", defaultTire).getPressure();

Or you can also have single argument constructor with max pressure to create deault Tire object

public Tire(int maxPressure) {
   this.maxPressure = maxPressure;
}

public final Tire defaultTire = new Tire(28);
tires.getOrDefault("Michelin", defaultTire).getPressure();

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=310644&siteId=1