gpt4 book ai didi

java - 如果满足条件,则将值添加到 HashMap 中的键

转载 作者:行者123 更新时间:2023-12-01 19:56:50 25 4
gpt4 key购买 nike

假设我有一个存储 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com