다중 레벨 해시 맵에 대해 반복 할 Java 프로그램을 작성하려고합니다. 예를 들어 은 HashMap <String, Object>
이고 Object는 다른 HashMap<String, Object>
이 될 수 있습니다.중첩 된 (다중 레벨) 해시 맵 반복 처리
이 해시 맵의 레벨은 n (> 5) 일 수 있습니다.
누군가 내게 자바로 쓰는 방법에 대한 힌트를 줄 수 있습니까? 자바는 유틸리티를 제공합니까?
감사
다중 레벨 해시 맵에 대해 반복 할 Java 프로그램을 작성하려고합니다. 예를 들어 은 HashMap <String, Object>
이고 Object는 다른 HashMap<String, Object>
이 될 수 있습니다.중첩 된 (다중 레벨) 해시 맵 반복 처리
이 해시 맵의 레벨은 n (> 5) 일 수 있습니다.
누군가 내게 자바로 쓰는 방법에 대한 힌트를 줄 수 있습니까? 자바는 유틸리티를 제공합니까?
감사
당신은 length
가 있는지 여부를 더 내용을 확인 여부를 다음 object
의 유형이 HashMap
여부를 확인하여 시작할 수 있습니다.
public void printAll(HashMap<String, Object> map) {
for (Object o : map.values()) {
if (o instanceof HashMap) {
printAll((HashMap<String, Object>) o);
} else {
System.out.println(o.toString());
}
}
}
방금 메모리에서 입력, 100 % 올바른 구문되지 않을 수 있습니다 : 프로그램의 성격에 대해 아무것도 모른 채
public void iterate(Map<String, Object> map) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println("Key is: " + entry.getKey());
if (entry.getValue() instanceof Map) {
System.out.println("Map found, digging further");
iterate((Map<String, Object>) entry.getValue());
} else {
System.out.println("Leaf found, value is: " + entry.getValue());
}
}
}
이것은 깊이 우선 반복을 수행합니다. 그러나 java는 강력한 형식의 언어이므로 중첩 해시 맵과 다른 유형은 일반적으로 좋은 아이디어가 아닙니다. 대부분의 경우 해킹과 관련없는 솔루션이 있습니다.
@David Frank의 천둥을 훔치는 것이 아닙니다. 반대로, 나는 그에게 모든 신용을주고있다. 다음은 플랫 출력지도를 얻을 것이라고 자신의 코드를 통해 약간의 수정이있는 점으로 구분 keySet
:
public void iterate(String currentKey, Map<String, Object> map, Map<String, String> out) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
if (entry.getValue() instanceof Map) {
iterate(currentKey + "." + entry.getKey(), (Map<String, Object>) entry.getValue(), out);
} else {
out.put(currentKey + "." + entry.getKey(), entry.getValue().toString());
}
}
}
내가 각각의 시작 부분에 .
을 제거 아니에요, 가능한 한 간단하게하려면 키.
재귀에 익숙합니까? 이런 유형의 문제가 필요할 것입니다 : http://examples.javacodegeeks.com/core-java/java-recursion-example/ – Brian