2014-11-12 4 views
0

작동하는 다음 코드가 있지만 어쨌든 길이가 짧으면 어떻게 할 수 있습니까? 나는 그것을 깊이있게 설명 할 것이다.하나의 Hashmaps로 다중. Java

나는이 세 가지 글로벌로 선언 한 :

나는 방법을 불렀다
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>(); 

마커()이 꽤 큰 코드를 가지고 있지만, 어딘가 코드에서, 내가 가진 :

pictureinfo.put(marker, poza); 
latitudeinfo.put(marker, latitude + ""); 
longitudeinfo.put(marker, longitude + ""); 

포자, 위도 및 경도는 데이터베이스에서 가져 오지만 관련이 없습니다. 또한 코드에는 다음과 같이 여러 표식에 대한 사용자 정의 정보 창이 있습니다.

String picture = pictureinfo.get(marker); 
latcoord.setText(latitudeinfo.get(marker)); 
lngcoord.setText(longitudeinfo.get(marker)); 

어떻게 줄을 단축 할 수 있습니까? 코드는 작동하지만 더 짧고 최적의 방법이 있다고 확신합니다. 나는 HashMaps와 ArrayLists를 원한다면 많은 경험이 필요하지 않으므로 어떤 지침도 감사 할 것입니다. 배우고 싶습니다. 감사합니다.

답변

3

정보 필드가있는 래퍼 개체를 만든 다음 해당 래퍼를 단일 맵에 저장할 수 있습니다.

그러나 이러한 최적화를 너무 많이하지 않아도 그다지 이득이 없을 수 있습니다. (즉 하나의 방법은, 비록) 나는 무엇을 할 것이라고

:

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으로 지정합니다. (Btw, latitude + "" 등 그래서 내가 원래 원시 번호를 가정합니다. 만약 그렇다면 그때 그들은 클래스로 변환되지 저장거야).

PictureInfo에는 설명이 포함되어 있습니다. 그 자체는 LocationInfo이고 다른 것은 무엇이든 필요합니다. 그런 다음지도에 PictureInfo 인스턴스 만 저장하면됩니다. (MarkerPictureInfo에만 사용되는 경우 해당 클래스의 멤버 일 수도 있습니다).

코드를 보면 알 수 있듯이 코드가 더 짧지는 않지만 코드를 이해하고 유지하는 것이 더 어려울 수 있기 때문에 더 짧지는 않습니다. 종종 코드에 더 많은 구조체가 필요합니다. 관련 데이터를 의미있는 클래스들로 캡슐화 함으로서.

+0

수, 당신을 나는 고려가 걸릴 것입니다하지만 내 자신의 이익을 위해, 내가 그렇게하는 방법을 배우고 싶어요 게시물을 정교하게 만드시겠습니까? – MrSilent

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());