У меня есть POJO
в Person.java
файл с:У java8 метода фильтра Stream() и map() используются итерации?
public class Person {
private String name;
private int age;
public Person(String n, int a) {
name = n;
age = a;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public boolean isAdult() {
return getAge() >= 18;
}
}
А потом у меня есть Demo.java
файл, который создает список лиц и использует потоки для фильтрации и печати содержимого из списка:
import java.util.*;
public class Demo {
public static void main(String[] args) {
List<Person> people = createPeople();
List<String> names = people.stream()
.filter(person -> person.isAdult())
.map(person -> person.getName())
.collect(toList());
System.out.println(names);
}
private static List<Person> createPeople() {
List<Person> people = new ArrayList<>();
people.add("John", 19);
people.add("Joe", 21);
people.add("Jill", 16);
people.add("Sylvester", 18);
people.add("Hillary", 17);
people.add("Donald", 4);
return people;
}
}
I хотел знать:
1> Делает filter()
и map()
внутренне использует цикл для повторения всех Person
ob в List
people
?
2> Если да, то они пересекают все объекты в списке два разных раза (1-я итерация по filter()
и другая по map()
)?
3> Если да, если я добавлю еще один метод map()
или filter()
, будет ли он снова пересекать все объекты в третий раз?
4> Если да, то как это отличается от нашей традиционной кодировки императивного стиля (по сути, в традиционном императивном стиле мы могли бы делать всю фильтрацию и отображение в течение одного единственного цикла в большинстве случаев. Таким образом, производительность в мудрый, императивный стиль кодирования будет работать лучше, чем потоки в таком случае.)?
PS: Если у вас есть No
по любому из вышеуказанных вопросов, пожалуйста, добавьте объяснение относительно того, как это работает.
Еще одна: Есть ли разница в итерации, выполняемой потоком внутри, и итерация, которую мы делаем в императивном стиле? Прошу прощения еще немного, насколько я знаю, с подробным объяснением.
1> да, но она перебирает поток, а не список. 2> нет 3> - 4> - –
2> Нет? Итак, как это работает. @FrankPuffer –
@FrankPuffer Как отличается итерация по потоку, итерация по списку? –