java - map getOrDefault返回对象时如何返回整数

标签 java

假设我有一个轮胎构造函数,它采用两个整数,pressuremaxPressure

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;}
}

在我的主类中,我可以将一个新的 Tire 添加到名为 tiresHashMap 中,pressure 为25 和 maxPressure 为 32。

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

我希望能够获取 Tire 对象的 pressure()(如果它存在)或使用 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();

显然这不起作用,因为 defaultTirePressure 是一个整数并且 tires 包含 Tire 对象。

这行得通,但是有点长:

//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;
}

在这个例子中就没有办法使用getOrDefault了吗?我觉得我可能已经回答了我自己的问题。

最佳答案

为什么不在getOrDefault方法中为Tire对象提供默认压力作为默认值

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

你也可以有默认的 Tire 对象

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

或者您也可以使用具有最大压力的单参数构造函数来创建默认 Tire 对象

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

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

关于java - map getOrDefault返回对象时如何返回整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58108029/

相关文章:

java - Java 线程单元测试

java - 为什么Netty不执行我的定时任务?

java - java中的内存分配

java - Jpa 存储库特殊词,如 "and' 、 "or"不起作用

java - 为什么打印 [[Ljava.lang.Object;@12f29d9, [Ljava.lang.Object;@1648f32]

java - Spring 框架: How can i start a web project with eclipse j2ee indigo?

java - 从 Twitter JSON Feed 中提取信息

java - 正则表达式匹配多行或其他解决方案?

java - 如何在 SQL Server 2012 中查询或插入值到二进制(1)字段?

无端口转发的 Java Web 通信