2009-11-14 5 views
0

동시에 생성자 내에서 for 루프를 만들어 맵과 배열을 반복하는 데 문제가 있습니다. Here, 향상된 for 루프를 사용하여이 작업을 수행 할 수 없음을 나타냅니다.for 루프에서 동시에 맵과 배열을 반복 처리합니다.

나는 컴파일러 오류를 발생시키는 이와 같은 것을 가지고있다. 기본적으로, 클래스는 Map을 가지고 있으며, 생성자를 통해 컬렉션과 정수의 가변 개수를 매개 변수로 사용하여 채 웁니다.

var-arg 표현식은 정수 배열로 평가되므로 확장 반복자를 모두 동일한 루프에 넣으려고했지만 작동하지 않았습니다.

private final Map<Module, Integer> modules = new HashMap<Module, Integer>();  
    AssemblyType(Collection<Module> modules, int... units) { 
     int i = 0; 
     for (Module module : modules, int i : units) { 
      this.modules.put(module, units[i]); 
     }  
    } 

진행 방법에 대한 의견을 보내 주셔서 감사합니다. 더 좋은 방법이 있다면

private final Map modules = new HashMap();  
    AssemblyType(Collection modules, int... units) { 
     int i = 0; 
     for (Module module : modules) { 
       this.modules.put(ingredient, units[i]); 
       i++; 
     }    
    }

는 잘 모르겠어요,하지만 난 당신이 내 두 반복자를 결합 할 수 없습니다 확신 해요 :

+0

&& 연산자가 for 루프 내에서 작동합니까? –

답변

2

단지 것이 작업을 수행하는 순진 방법 i에게 자신을 추적 원본 예제와 같은 하나의 for 루프.

+0

가장 간단한 방법이 일반적으로 가장 좋습니다. 또한 var args가 콜렉션과 길이가 같기 때문에이 경우에도 작동합니다! 감사합니다 – denchr

0

Map 모듈을 Collection으로 전달하면 컴파일 오류가 발생할 수 있습니다. 당신은 그들이 당신은 또한 for(int i ... 루프 배열을 통과 할 수 있고, 당신의 경우지도에 대한 반복자를 사용하는 것과 동일한 길이를 알고있는 경우 모두를 반복하는

코드는이

public MyMethod(Map<Object, Object> objectMap, Integer ... intArray) { 
    if(intArray.length != ObjectMap.size()) { 
     //However you want to handle this case 
    } 
    Iterator<Object> mapKeyIterator = objectMap.keySet().iterator(); 
    Iterator<Integer> integerIterator = Arrays.asList(intArray).iterator(); 

    while(mapKeyIterator.hasNext()) { //If the array and map are the same size then you only need to check for one. Otherwise you'll need to validate both iterators have a next 
     Object keyFromMap = mapKeyIterator.next(); 
     Object valueFromMap = objectMap.get(keyFromMap); 
     Integer intFromArray = integerIterator.next(); 
     //Whatever you want to do 
    } 
} 

같은 수 목록을 만들고 싶지 않았습니다.

0

완전히 연결이 끊어진지도와 배열을 요청하는 것은 매우 오류가 발생하기 쉬운 API처럼 보입니다. 오류가 발생하기 쉬울뿐만 아니라 코드 독자가 어떤 int가 어떤지도 항목과 함께 있는지 파악할 수 있습니다. 나는 항상 이런 종류의 API를 권고한다. Map < Object, MySpecialType > MySpecialType은 Object와 int를 모두 집계합니다.

+0

예, 조금 위험 할 수 있습니다. 문제가 그러한 모호한 용어로 언급 될 때 어려울 것이라고 제안하는 접근법에 대한 간단한 예를 들려 주시겠습니까 – denchr

+0

; 좀 더 구체적으로 만들 수 있다면 도움이 될 것입니다. (참고 : 여기에 대한 나의 대답은 약간 이해하기 쉽기 때문에 나는 다시 꺽쇠 괄호를 빠져 나갔다. –