2014-11-15 2 views
2

나는 Map<String, String> pairs을 가지고 있으며 이것을 ArrayListNameValuePair 개체로 바꾸고 싶습니다. 전환을 실행하는 가장 좋은 방법입니까?지도 <String, String>을 List <NameValuePair>로 변환 - 이것이 가장 효율적입니까?

List<NameValuePair> nvpList = new ArrayList<NameValuePair>(2); 
for(Map.Entry<String, String> entry : pairs.entrySet()){ 
    NameValuePair n = new NameValuePair(entry.getKey(), entry.getValue()); 
    nvpList.add(n); 
} 
+1

초기 용량으로'ArrayList'를 초기화 :

아래 전체 올바른 코드를 참조하십시오. –

+0

오 그래, 그냥 컴파일러없이 썼습니다. – locoboy

+1

초기 용량은 pairs.size()와 같습니다. – LeffeBrune

답변

4

네임보다 절대적으로 NameValuePair를 사용해야하는 경우. 미래의 독자

List<NameValuePair> nvpList = new ArrayList<>(pairs.size()); 
for (Map.Entry<String, String> entry : pairs.entrySet()) { 
    nvpList.add(new NameValuePair(entry.getKey(), entry.getValue())); 
} 
+0

'httpPost.setEntity (new UrlEncodedFormEntity (nameValuePairs));' – locoboy

2

:이 점차 성장함에 따라 내가 pairs.size의 크기의 ArrayList를 만드는 제안 유일한 것은() 내부 배열을 여러 번 크기를 조정 ArrayList의 오버 헤드를 피하기 위해

을 @Locoboy 당신의 코드 스 니펫에 약간의 수정이 필요하고 인터페이스를 인스턴스화 할 수 없기 때문에 @ LeffeBrune의 응답이 실패합니다. 이 줄을 수정하는

필요 그래서 같은

nvpList.add(new NameValuePair(entry.getKey(), entry.getValue())); 

는 :

nvpList.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); 

BasicNameValuePair 클래스는 여기에 사용 할 수 있도록 의 NameValuePair 인터페이스를 구현합니다.

public List<NameValuePair> convertToNameValuePair(Map<String, String> pairs) { 

    List<NameValuePair> nvpList = new ArrayList<>(pairs.size()); 

    for (Map.Entry<String, String> entry : pairs.entrySet()) { 
     nvpList.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); 
    } 

    return nvpList; 
} 
+0

이것은 4.0 이상의 라이브러리 버전에서만 유효합니다. 하위 버전 (예 : <4.0)의 경우 @ LeffeBrune의 대답은 맞습니다 (실제로 NameValuePair는 java.io.Serializable을 구현하는 클래스입니다). – mginius

관련 문제