假设我有一个存储 Fruit
的 HashMap作为其键和 Cars
的 ArrayList作为它的值(value)。
一个Fruit
是一个带有 String name, int height, int width
的对象。一个Car
是一个带有 String name, String FruitItRunsOver, int weight
的对象。
我应该将运行该水果的水果和汽车添加到我的 HashMap 中。我最初按顺序获得水果,然后按顺序获得汽车。
现在,我遇到的问题是,我通过 FruitItRunsOver 成员变量知道汽车跑过哪种水果,正如您可能猜到的那样,该变量与水果的名称相同。最初,我得到了水果,当我得到它们时,我 put(Fruit, new ArrayList<Car>())
.
但是,一旦我到达汽车后,我想知道添加它们的最佳方式是什么?我很想拥有像这样的东西:
for (Fruit f : hashmap.keySet()) {
if (f.getName().equals(car.getFruit())) {
ArrayList<Car> cars = hashmap.get(f);
cars.add(car);
hashmap.put(f, cars)
}
}
..但我认为这看起来很糟糕。我想我可以拥有 key ,而不是水果,而是水果的名称。但请记住,我需要保存水果的其他成员变量。稍后我将在代码中需要它们。那么,我应该有一个嵌套的 HashMap 吗?如果是这样,结构应该是什么样子?
谢谢
编辑:我想这是我没有澄清的错。 car.getFruit()
将返回水果名称FruitItRunsOver
,不是Fruit
对象。
最佳答案
制作Map<String,Fruit>
将水果名称映射到 Fruit
对象。如果您计划不进一步修改水果到汽车的 map ,则该 map 可以是临时的,或者您可以在程序运行期间保留它:
Map<String,Fruit> fruitByName = new HashMap<>();
for (Fruit fruit : allFruits) {
fruitByName.put(fruit.getName(), fruit);
}
Map<Fruit,List<Car>> carByFruit = new HashMap<>();
for (Car car : allCars) {
Fruit f = fruitByName.get(car.getFruit());
if (f == null) {
... // Throw an exception
}
List<Car> cars = carByFruit.get(f);
if (cars == null) {
cars = new ArrayList<Car>();
carByFruit.put(f, cars);
}
cars.add(car);
}
您还可以创建 Map<String,FruitAndItsCars>
,还有一个额外的FruitAndItsCars
组合 Fruit
的类带有 List<Car>
的对象对象列表。
关于java - 如果满足条件,则将值添加到 HashMap 中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49353169/