나는 HashMap
:
private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();
이제 모든 값을 살펴보고 인쇄하고 싶습니다.
나는 이것을 썼다 :
for (TypeValue name : this.example.keySet()) {
System.out.println(name);
}
작동하지 않는 것 같습니다.
무엇이 문제입니까?
편집 : 또 다른 질문 :이 컬렉션은 제로 기반입니까? 키가 1 개 있고 값이 0 또는 1이면 크기가 무엇입니까?
답변
keySet () 은 해시 맵에서 키 세트 만 반환합니다.이 키 세트를 반복하고이 키를 사용하여 해시 맵에서 값을 가져와야합니다.
귀하의 예에서 해시 맵의 키 유형은 TypeKey
이지만 TypeValue
일반 for 루프에서 지정했기 때문에 컴파일 할 수 없습니다. 다음으로 변경해야합니다.
for (TypeKey name: example.keySet()){
String key = name.toString();
String value = example.get(name).toString();
System.out.println(key + " " + value);
}
Java8 업데이트 :
example.entrySet().forEach(entry->{
System.out.println(entry.getKey() + " " + entry.getValue());
});
키 값을 인쇄 할 필요가없고 해시 맵 값만 필요한 경우 다른 사람의 제안을 사용할 수 있습니다.
또 다른 질문 :이 컬렉션이 제로베이스입니까? 키가 1 개이고 값이 0 또는 1이 될까요?
에서 반환 된 컬렉션 keySet()
은 Set입니다 . 인덱스를 사용하여 Set에서 값을 가져올 수 없으므로 0 기반인지 1 기반인지에 대한 질문이 아닙니다. 해시 맵에 하나의 키가있는 경우 반환 된 keySet ()에는 하나의 항목이 포함되고 크기는 1이됩니다.
답변
키 값 쌍을 보는 간단한 방법 :
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
System.out.println(Arrays.asList(map)); // method 1
System.out.println(Collections.singletonList(map)); // method 2
방법 1과 방법 2 모두 다음을 출력합니다.
[{b=2, a=1}]
답변
을 가지고 있다고 가정하면 다음 Map<KeyType, ValueType>
과 같이 인쇄 할 수 있습니다.
for (Map.Entry<KeyType, ValueType> entry : map.entrySet()) {
System.out.println(entry.getKey()+" : "+entry.getValue());
}
답변
키와 값을 모두 인쇄하려면 다음을 사용하십시오.
for (Object objectName : example.keySet()) {
System.out.println(objectName);
System.out.println(example.get(objectName));
}
답변
몇 가지 옵션이 있습니다
- Get
map.values()
, 키가 아닌 값을 가져옵니다. map.entrySet()
둘 다 있는 것을 얻으십시오- 를 취득
keySet()
하고 각 키 호출map.get(key)
답변
키 세트가 아닌 값 세트를 원합니다.
for (TypeValue name: this.example.values()) {
System.out.println(name);
}
당신이 제공하는 코드는 컴파일조차하지 않을 것입니다. 이것은 미래의 질문에서 언급 할 가치가있을 것입니다 – “작동하지 않는 것 같습니다”는 약간 모호합니다!
답변
Java 8 접근 방식, 사용 BiConsumer
및 람다 함수 를 언급 할 가치가 있습니다.
BiConsumer<TypeKey, TypeValue> consumer = (o1, o2) ->
System.out.println(o1 + ", " + o2);
example.forEach(consumer);
toString
필요한 경우 두 유형의 메서드를 재정의했다고 가정 합니다.