我有以下代码可以使用,但如果有任何办法,我怎么能缩短它。我将深入解释。
我将这三个声明为全球:
private Map<Marker, String> pictureinfo = new HashMap<Marker, String>();
private Map<Marker, String> latitudeinfo = new HashMap<Marker, String>();
private Map<Marker, String> longitudeinfo = new HashMap<Marker, String>();
我有一个名为markers()的方法,它有一个非常大的代码,但在代码的某处,我有:
pictureinfo.put(marker, poza);
latitudeinfo.put(marker, latitude + "");
longitudeinfo.put(marker, longitude + "");
poza,纬度和经度来自数据库,但这是无关紧要的。在代码中,我有一个自定义的infowindow用于多个标记,我有:
String picture = pictureinfo.get(marker);
latcoord.setText(latitudeinfo.get(marker));
lngcoord.setText(longitudeinfo.get(marker));
如何缩短这些线?代码有效,但我确信还有另一种方式,更短,更优。我没有太多经验希望HashMaps和ArrayLists所以任何指导都将受到赞赏,我想学习,谢谢。
答案 0 :(得分:3)
您可以创建一个包含info字段的包装器对象,然后将这些包装器存储在一个映射中。
但是,我不会因为这种优化而烦恼太多,可能没有多少收获。
我会做什么(虽然这只是一种方式):
class LocationInfo {
private String latitudeInfo;
private String longitudeInfo;
...
}
class PictureInfo {
private String description; //I assume that's what pictureInfo means
private LocationInfo locInfo;
...
}
Map<Marker, PictureInfo> infoMap = ...;
我不确定你的代码的确切语义,所以这只是粗略的近似。基本上我将一个位置的信息放在一个类中,因为它不一定是图片特定的。根据语义,LocationInfo
也可以包含位置本身 - 在这种情况下,我将该类命名为Location
。 (顺便说一句,你还要latitude + ""
等等,所以我假设你原来有原始数字。如果是这样的话,那么我将它们存储在LocationInfo
类中未转换)。
PictureInfo
包含一个描述,它自己的LocationInfo
以及它需要的任何其他内容。然后,您只需在地图中存储PictureInfo
个实例。 (如果Marker
仅用于PictureInfo
,则它也可以是该类的成员。)
正如您所看到的,代码可能不会缩短,但通常更短并不会更好,因为代码可能更难以理解和维护。通常,您需要在代码中使用更多结构,例如通过将相关数据封装到有意义的类等中。
答案 1 :(得分:1)
不确定您的目的,但从第一眼看这个代码会损害面向对象。您在地图中保存的数据似乎强烈地连接到某个Marker对象,并且应该在其中。
class Marker{
....
String pictureInfo;
String latitude;
String longitude;
...
}
而不是:
pictureinfo.put(marker, poza);
latitudeinfo.put(marker, latitude + "");
longitudeinfo.put(marker, longitude + "");
这样:
marker.setPictureInfo(poza);
marker.setLatitudeInfo(String.valueof(latitude));
marker.setLongitudeInfo(String.valueof(longitude));
String picture = marker.getPictureInfo();
latcoord.setText(marker.getLatitudeInfo());
lngcoord.setText(marker.getLongitudeInfo());