Одна из основных задач, выполняемых над коллекциями, это проход по всей коллекции и выполнение над её элементами какого-либо действия:
1
2
3
4
5
6
7
|
public Collection<String> iterateOldSchool() {
Collection<String> upper = new ArrayList<>();
for (String s : LONG_WELCOME) {
upper.add(s.toUpperCase());
}
return upper;
}
|
В Java8 у интерфейса Iterable появился метод forEach, принимающий лямбда-выражение и применяющий это выражение на каждый элемент коллекции:
1
2
3
4
5
|
public Collection<String> forEach() {
Collection<String> upper = new ArrayList<>();
LONG_WELCOME.forEach(s -> upper.add(s.toUpperCase()));
return upper;
}
|
Особенно удобно использовать forEach с Map:
1
2
3
4
5
|
public Map<Integer, String> forEachMap() {
Map<Integer, String> upper = new HashMap<>();
MAP.forEach((k, v) -> upper.put(k, v.toUpperCase()));
return upper;
}
|
В сравнении с классическим подходом выигрыш в читаемости кода налицо:
1
2
3
4
5
6
7
|
public Map<Integer,String> iterateMapOldSchool() {
Map<Integer, String> upper = new HashMap<>();
for (Map.Entry<Integer, String> entry: MAP.entrySet()) {
upper.put(entry.getKey(), entry.getValue().toUpperCase());
}
return upper;
}
|
Код примера доступен на github.