[java] forEach 루프 Java 8 for Map 항목 세트
맵 항목 세트에 대한 각 루프에 대해 java7까지 각 루프에 대해 기존의 기존 방식을 java8로 변환하려고 시도하고 있지만 오류가 발생합니다. 변환하려는 코드는 다음과 같습니다.
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue());
}
내가 한 변경 사항은 다음과 같습니다.
map.forEach( Map.Entry<String, String> entry -> {
System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue());
});
나는 이것을 시도했다.
Map.Entry<String, String> entry;
map.forEach(entry -> {
System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue());
});
그러나 여전히 오류가 있습니다. 이에 대한 오류는 다음과 같습니다. Lambda 식의 서명이 기능적 인터페이스 메서드의 서명과 일치하지 않습니다.accept(String, String)
답변
javadoc 읽기 : as 인수를 Map<K, V>.forEach()
예상 BiConsumer<? super K,? super V>
하고 BiConsumer<T, U>
추상 메소드의 서명은입니다 accept(T t, U u)
.
따라서 키와 값이라는 두 개의 입력을 인수로받는 람다 식을 전달해야합니다.
map.forEach((key, value) -> {
System.out.println("Key : " + key + " Value : " + value);
});
지도 자체가 아닌지도의 항목 집합에서 forEach ()를 호출하면 코드가 작동합니다.
map.entrySet().forEach(entry -> {
System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue());
});
답변
“어떤 버전이 더 빠르고 어떤 버전을 사용해야합니까?”와 같은 질문에 답하는 가장 좋은 방법 일 수 있습니다. 소스 코드를 살펴 보는 것입니다.
map.forEach () -Map.java에서
default void forEach(BiConsumer<? super K, ? super V> action) {
Objects.requireNonNull(action);
for (Map.Entry<K, V> entry : entrySet()) {
K k;
V v;
try {
k = entry.getKey();
v = entry.getValue();
} catch(IllegalStateException ise) {
// this usually means the entry is no longer in the map.
throw new ConcurrentModificationException(ise);
}
action.accept(k, v);
}
}
map.entrySet (). forEach ()-Iterable.java 에서
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
이것은 map.forEach () 가 내부적으로 Map.Entry 도 사용 하고 있음을 즉시 보여 줍니다 . 따라서 map.entrySet (). forEach ()를 통해 map.forEach () 를 사용하면 성능상의 이점을 기대하지 않습니다 . 따라서 귀하의 경우 대답은 실제로 귀하의 개인적인 취향에 달려 있습니다. 🙂
차이점의 전체 목록은 제공된 javadoc 링크를 참조하십시오. 즐거운 코딩 되세요!
답변
요구 사항에 대해 다음 코드를 사용할 수 있습니다.
map.forEach((k,v)->System.out.println("Item : " + k + " Count : " + v));
답변
HashMap<String,Integer> hm = new HashMap();
hm.put("A",1);
hm.put("B",2);
hm.put("C",3);
hm.put("D",4);
hm.forEach((key,value)->{
System.out.println("Key: "+key + " value: "+value);
});
답변
스트림 API
public void iterateStreamAPI(Map<String, Integer> map) {
map.entrySet().stream().forEach(e -> System.out.println(e.getKey() + ":"e.getValue()));
}
답변
String ss = "Pawan kavita kiyansh Patidar Patidar";
StringBuilder ress = new StringBuilder();
Map<Character, Integer> fre = ss.chars().boxed()
.collect(Collectors.toMap(k->Character.valueOf((char) k.intValue()),k->1,Integer::sum));
//fre.forEach((k, v) -> System.out.println((k + ":" + v)));
fre.entrySet().forEach(e ->{
//System.out.println(e.getKey() + ":" + e.getValue());
//ress.append(String.valueOf(e.getKey())+e.getValue());
});
fre.forEach((k,v)->{
//System.out.println("Item : " + k + " Count : " + v);
ress.append(String.valueOf(k)+String.valueOf(v));
});
System.out.println(ress.toString());