Jak już wspomniano, w języku Java 8 mamy metodę forEach
, która akceptuje lambda expression. Ale mamy także interfejsy API stream.
iteracyjne nad wpisami (przy użyciu foreach i strumieni):
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);
});
Zaletą jest strumienie mogą być parallelized łatwo i może być przydatna, gdy mamy wiele procesorów do dyspozycji. Po prostu potrzebujemy użyć parallelStream()
zamiast powyższego stream()
. W przypadku strumieni równoległych bardziej sensowne jest używanie wartości forEach
, ponieważ nie ma to wpływu na wydajność. Jeśli chcemy iterować po kluczach, możemy użyć sample.keySet()
i dla wartości sample.values()
.
Dlaczego forEachOrdered
, a nie forEach
ze strumieniami?
Strumienie zapewniają również forEach
metody, ale zachowanie forEach
jest wyraźnie niedeterministyczny gdzie jako forEachOrdered
wykonuje czynność, dla każdego elementu z tego strumienia, w celu zetknięcie strumienia jeżeli strumień posiada określoną kolejność spotkań. Tak więc forEach
nie gwarantuje, że zamówienie zostanie zachowane. Sprawdź także this, aby uzyskać więcej informacji.
W języku Java 8 przy użyciu Lambda: http://stackoverflow.com/a/25616206/1503859 –