각 해시맵에 대해 어떻게 합니까?
다음 필드가 있습니다.
HashMap<String, HashMap> selects = new HashMap<String, HashMap>();
각각에 대해서Hash<String, HashMap>
작성해야 할 필요가 있습니다.ComboBox
(해시맵 자체)의 값입니다.HashMap <String, **HashMap**>
.
(기능하지 않는) 데모를 통해:
for (int i=0; i < selects.size(); i++) {
HashMap h = selects[i].getValue();
ComboBox cb = new ComboBox();
for (int y=0; y < h.size(); i++) {
cb.items.add(h[y].getValue);
}
}
제가 좀 늦은 건 알지만, 다른 사람에게 도움이 될 수 있도록 제가 한 일도 말씀드리겠습니다.
HashMap<String, HashMap> selects = new HashMap<String, HashMap>();
for(Map.Entry<String, HashMap> entry : selects.entrySet()) {
String key = entry.getKey();
HashMap value = entry.getValue();
// do what you have to do here
// In your case, another loop.
}
람다 표현 Java 8
Java 1.8(Java 8)에서는 반복 가능한 인터페이스의 반복기와 유사한 Aggregate 작업(Stream 작업)의 각 메서드를 사용함으로써 이 작업이 훨씬 쉬워졌습니다.
아래 문장을 코드에 복사하여 HM에서 HashMap 변수로 이름을 변경하여 키와 값의 쌍을 출력합니다.
HashMap<Integer,Integer> hm = new HashMap<Integer, Integer>();
/*
* Logic to put the Key,Value pair in your HashMap hm
*/
// Print the key value pair in one line.
hm.forEach((k,v) -> System.out.println("key: "+k+" value:"+v));
다음은 람다 식을 사용하는 예입니다.
HashMap<Integer,Integer> hm = new HashMap<Integer, Integer>();
Random rand = new Random(47);
int i=0;
while(i<5){
i++;
int key = rand.nextInt(20);
int value = rand.nextInt(50);
System.out.println("Inserting key: "+key+" Value: "+value);
Integer imap =hm.put(key,value);
if( imap == null){
System.out.println("Inserted");
}
else{
System.out.println("Replaced with "+imap);
}
}
hm.forEach((k,v) -> System.out.println("key: "+k+" value:"+v));
Output:
Inserting key: 18 Value: 5
Inserted
Inserting key: 13 Value: 11
Inserted
Inserting key: 1 Value: 29
Inserted
Inserting key: 8 Value: 0
Inserted
Inserting key: 2 Value: 7
Inserted
key: 1 value:29
key: 18 value:5
key: 2 value:7
key: 8 value:0
key: 13 value:11
스플리테이터도 같은 용도로 사용할 수 있습니다.
Spliterator sit = hm.entrySet().spliterator();
갱신하다
Oracle Docs에 대한 문서 링크 포함.Lambda에 대한 자세한 내용은 이 링크로 이동하여 Aggregate Operations를 읽어야 하며, 스플리테이터의 경우 이 링크로 이동하십시오.
Map.values()
:
HashMap<String, HashMap<SomeInnerKeyType, String>> selects =
new HashMap<String, HashMap<SomeInnerKeyType, String>>();
...
for(HashMap<SomeInnerKeyType, String> h : selects.values())
{
ComboBox cb = new ComboBox();
for(String s : h.values())
{
cb.items.add(s);
}
}
스트림 Java 8
와 함께forEach
람다 식을 받아들이는 메서드. Java 8에서는 스트림 API도 얻을 수 있습니다.
엔트리에 반복(각 및 스트림에 사용):
sample.forEach((k,v) -> System.out.println(k + "=" + v));
sample.entrySet().stream().forEachOrdered((entry) -> {
Object currentKey = entry.getKey();
Object currentValue = entry.getValue();
System.out.println(currentKey + "=" + currentValue);
});
sample.entrySet().parallelStream().forEach((entry) -> {
Object currentKey = entry.getKey();
Object currentValue = entry.getValue();
System.out.println(currentKey + "=" + currentValue);
});
스트림의 장점은 병렬화가 용이하여 여러 CPU를 자유롭게 사용할 수 있을 때 유용합니다.우리는 단지 그것을 사용하기만 하면 된다.parallelStream()
대신해서stream()
위. 병렬 스트림을 사용하는 것이 더 합리적입니다.forEach
~하듯이forEachOrdered
퍼포먼스에 차이가 없습니다.키를 반복하고 싶은 경우 사용할 수 있습니다.sample.keySet()
및 가치의 경우sample.values()
.
왜죠forEachOrdered
가 아니라forEach
스트림 포함?
스트림은 또한forEach
방법이지만 동작은forEach
명백하게 확정적이지 않다.forEachOrdered
는 스트림에 만남 순서가 정의된 경우 스트림의 만남 순서로 이 스트림의 각 요소에 대해 액션을 수행합니다.그렇게forEach
주문이 유지된다는 보장은 없습니다.자세한 내용은 이 항목도 확인하십시오.
를 반복할 수 있습니다.HashMap
(및 기타 많은 컬렉션) 반복기를 사용합니다. 예:
HashMap<T,U> map = new HashMap<T,U>();
...
Iterator it = map.values().iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
일반적으로 cx42net과 동일한 작업을 수행하지만 엔트리를 명시적으로 작성하지는 않습니다.
HashMap<String, HashMap> selects = new HashMap<String, HashMap>();
for (String key : selects.keySet())
{
HashMap<innerKey, String> boxHolder = selects.get(key);
ComboBox cb = new ComboBox();
for (InnerKey innerKey : boxHolder.keySet())
{
cb.items.add(boxHolder.get(innerKey));
}
}
이것이 가장 직관적으로 느껴질 뿐이지, 지도의 가치를 두고 반복하는 것에 대해 편견을 가지고 있다고 생각합니다.
entrySet
,
/**
*Output:
D: 99.22
A: 3434.34
C: 1378.0
B: 123.22
E: -19.08
B's new balance: 1123.22
*/
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MainClass {
public static void main(String args[]) {
HashMap<String, Double> hm = new HashMap<String, Double>();
hm.put("A", new Double(3434.34));
hm.put("B", new Double(123.22));
hm.put("C", new Double(1378.00));
hm.put("D", new Double(99.22));
hm.put("E", new Double(-19.08));
Set<Map.Entry<String, Double>> set = hm.entrySet();
for (Map.Entry<String, Double> me : set) {
System.out.print(me.getKey() + ": ");
System.out.println(me.getValue());
}
System.out.println();
double balance = hm.get("B");
hm.put("B", balance + 1000);
System.out.println("B's new balance: " + hm.get("B"));
}
}
자세한 예는 이쪽을 참조해 주세요.
언급URL : https://stackoverflow.com/questions/4234985/how-to-for-each-the-hashmap
'source' 카테고리의 다른 글
Jackson에서 Java 개체를 JsonNode로 변환 (0) | 2022.08.17 |
---|---|
조립 코드를 C에 삽입할 수 있는 방법이 있나요? (0) | 2022.08.17 |
의 웹 팩JSP 인덱스 파일 (0) | 2022.08.17 |
Vue에서 "v-html"과 함께 추가된 콘텐츠에 "v-on"을 설정하는 방법 (0) | 2022.08.17 |
Vuej 및 vue-socketio: 소켓 인스턴스를 컴포넌트에 전달하는 방법 (0) | 2022.08.17 |