私はPOJO
Person.java
内のファイルがあります:java8 Streamのfilter()メソッドと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;
}
}
を私は知りたかった:
1>filter()
とmap()
は内部でループを使用してPerson
ob List
people
のjects?
2>はいの場合、リスト内のすべてのオブジェクトを2回繰り返します(1回目の繰り返しはfilter()
、その他はmap()
)。
3>もう一度「map()
」または「filter()
」というメソッドを追加すると、3回目に再びすべてのオブジェクトがループされますか?
4>もう一度答えると、伝統的な命令的スタイルのコーディングとはどのようにパフォーマンスが違うのですか(実際は伝統的な命令的なスタイルでは、たいていの場合1つのシングルループですべてのフィルタリングとマッピングができます。したがって、パフォーマンスは賢明です。このような場合、命令型のコーディングはストリームよりも優れています。)
PS:上記の質問にNo
がある場合は、どのように動作するかについての説明を追加してください。
もう1つ:内部でストリームの反復処理と命令型の反復処理がありますか?詳細な説明をして、私の知識にもっと光を当ててください。
1>はい、それを反復処理するストリームではなく、リストの上に。 2> no 3> - > 4 - –
2>いいえ?それでどうやって動くの? @FrankPuffer –
@FrankPufferリストの反復処理とストリームの反復処理はどのように異なっていますか? –