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

标签 java hashmap

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

相关文章:

java - RESTful 放置 id 和 body

Java HashMap 自动值复制问题

java - 使用值列表搜索 HashMap 的优化

c++ - 理解 C++ 映射为什么不使用 clear() 释放堆内存?

Java - map.get 不起作用,但元素在 map 中?

java - 对 jlist 的元素进行排序

java - 如何在不出现 NullPointEreException 的情况下将数组的大小加倍?

java - 任何 HashMap 方法都不会调用覆盖的 hashCode() 函数

java - 为什么这段代码可以编译但运行时崩溃?

java - 如何将 HashMap 复制到具有不同引用的 ArrayList