0

我想创建一个 HashMap,将键存储为整数值,即餐厅的 ID。该值应该是 Restaurant 对象的 List。但是我的 IDE 对我在将餐厅对象添加到列表时的操作方式不满意。这是我的代码:

public List getTopPerformers(List<RestaurantInfo> restaurants){

    HashMap <Integer, List<RestaurantInfo>> map = new HashMap<Integer,
                                             List< RestaurantInfo>>();
             // Key is restaurant ID. Value is the Object of Class RestaurantInfo
    List<RestaurantInfo> ll;
    for(RestaurantInfo restaurant: restaurants){

        map.put(restaurant.cityId, ll.add(restaurant));

    }
}

我的 Restaurant 类具有 cityId、orderCount 和 restaurantId 等属性。

map.put(restaurant.cityId, ll.add(restaurant));行给出如下错误,显然它永远不会编译。

no suitable method found for put(int,boolean)
method HashMap.put(Integer,List<RestaurantInfo>) is not applicable

(实参boolean不能通过方法调用转换为List)

4

3 回答 3

3

ll.add(restaurant) 返回布尔值。

所以,当你这样做时:

map.put(restaurant.cityId, ll.add(restaurant));

您正在尝试将 (int, boolean) 添加到类型的映射中: (Integer,List)

此外,下面的代码会将所有餐厅添加到每个 cityid:

List<RestaurantInfo> ll = new List<RestaurantInfo>();
for(RestaurantInfo restaurant: restaurants){
    ll.add(restaurant);
    map.put(restaurant.cityId, ll);
}

我认为你需要的是:

List<RestaurantInfo> ll;
for (RestaurantInfo restaurant: restaurants) {
  // If restaurant is from the same city which is present in the map then add restaurant to the existing list, else create new list and add.
  if (map.containsKey(restaurant.cityId)) {
    ll = map.get(restaurant.cityId);
  } else {
    ll = new List<RestaurantInfo>();
  }
  ll.add(restaurant);
  map.put(restaurant.cityId, ll);
}
于 2013-10-31T02:56:24.807 回答
1
  map.put(restaurant.cityId, ll.add(restaurant));

在这份声明中,

ll.add(restaurant)

returnadd 操作的值为boolean,这就是您收到该错误的原因。

您可能需要做的是:

ll.add(restaurant);
map.put(restaurant.cityId, ll);
于 2013-10-31T02:54:39.687 回答
1

add(E)集合的函数返回布尔值:true如果E添加了数据并且集合结构已更改(false如果此集合不允许重复且已包含指定元素,则返回)。

因此:

for(RestaurantInfo restaurant: restaurants){
        map.put(restaurant.cityId, ll.add(restaurant));
    }

本质上等同于:

for(RestaurantInfo restaurant: restaurants){
            map.put(restaurant.cityId, boolean);
        }

因此,首先将resutaurant实例ll一个一个添加到列表中,然后将ll列表实例添加到map.

你可能想做这样的事情:

RestaurantInfo restaurant =  resturants.get(0);
int cityId = restaurant.cityId;

List<RestaurantInfo> ll = new ArrayList<>();

for(RestaurantInfo restaurant: restaurants){
            ll.add(restaurant);
        }

 map.put(cityId, ll);
于 2013-10-31T02:59:52.510 回答