for循环从HashMap获取值

时间:2013-11-26 20:32:06

标签: java android

我想创建一个for循环来从HashMap中获取值。我试过这个:

final ArrayList<String> list = new ArrayList<String>();
            for (int i = 0; i < places1.size(); ++i) {

                list.addAll(places1.values());

            }

但它只带来第一个元素并多次打印,我该怎么做?

其中places1是我从另一个活动获得的HashMap:

HashMap<String, String> places1=(HashMap<String, String>) extras.getSerializable("com.example.dashboard_our.hmPlace");

这是打印列表的其余代码:

final StableArrayAdapter adapter = new StableArrayAdapter(this,
                android.R.layout.simple_list_item_1, list);
            listview.setAdapter(adapter);

            listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

              @Override
              public void onItemClick(AdapterView<?> parent, final View view,
                  int position, long id) {
                final String item = (String) parent.getItemAtPosition(position);
                view.animate().setDuration(2000).alpha(0)
                    .withEndAction(new Runnable() {
                      @Override
                      public void run() {
                        list.remove(item);
                        adapter.notifyDataSetChanged();
                        view.setAlpha(1);
                      }
                    });
              }

            });
          }

          private class StableArrayAdapter extends ArrayAdapter<String> {

            HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();

            public StableArrayAdapter(Context context, int textViewResourceId,
                List<String> objects) {
              super(context, textViewResourceId, objects);
              for (int i = 0; i < objects.size(); ++i) {
                mIdMap.put(objects.get(i), i);
              }
            }

            @Override
            public long getItemId(int position) {
              String item = getItem(position);
              return mIdMap.get(item);
            }

            @Override
            public boolean hasStableIds() {
              return true;
            }

          }

这是第一个活动中的代码*强调文字*

protected void onPostExecute(List<HashMap<String,String>> list){

                // Clears all the existing markers
                mGoogleMap.clear();

                for(int i=0;i<list.size();i++){

                    // Creating a marker
                    MarkerOptions markerOptions = new MarkerOptions();

                    // Getting a place from the places list
                    //HashMap<String, String>
                    hmPlace = list.get(i);

                    // Getting latitude of the place
                    double lat = Double.parseDouble(hmPlace.get("lat"));

                    // Getting longitude of the place
                    double lng = Double.parseDouble(hmPlace.get("lng"));

                    // Getting name
                    String name = hmPlace.get("place_name");

                   // listP[i]=hmPlace.get("place_name");
                    Log.d("places=",hmPlace.get("place_name"));

                    // Getting vicinity
                    String vicinity = hmPlace.get("vicinity");

                    LatLng latLng = new LatLng(lat, lng);

                    // Setting the position for the marker
                    markerOptions.position(latLng);

                    // Setting the title for the marker.
                    //This will be displayed on taping the marker
                    markerOptions.title(name + " : " + vicinity);

                    // Placing a marker on the touched position
                    Marker m = mGoogleMap.addMarker(markerOptions);

                    // Linking Marker id and place reference
                    mMarkerPlaceLink.put(m.getId(), hmPlace.get("reference"));
                }
            }
        }

我将hmPlace传递给第二个活动:

intent = new Intent(getApplicationContext(), List_airports.class);
                intent.putExtra("com.example.dashboard_our.hmPlace",hmPlace);

                startActivity(intent);

3 个答案:

答案 0 :(得分:1)

遍历入口集:

public static void printMap(Map mp) {
    Iterator it = mp.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pairs = (Map.Entry)it.next();
        System.out.println(pairs.getKey() + " = " + pairs.getValue());
        it.remove(); // avoids a ConcurrentModificationException
    }
}

答案 1 :(得分:1)

您可以迭代这样的地方:

for (String place : places1.values()) {
    list.add(place);
}

答案 2 :(得分:0)

您可以使用HashMap.values()方法,它会返回Collection<V>//where V is the value type

final ArrayList<String> list = new ArrayList<String>(places1.values());

或者:ArrayList.addAll(Collection<? extends E> collection)

list.addAll(places1.values());// Only call this once!