我正在尝试理解Java 8中parallelStream()
的行为。这是我的示例代码。
List<Person> javaProgrammers = new ArrayList<Person>() {
{
add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000));
add(new Person("Tamsen", "Brittany", "Java programmer", "female", 33, 1500));
add(new Person("Floyd", "Donny", "Java programmer", "male", 33, 1800));
add(new Person("Sindy", "Jonie", "Java programmer", "female", 32, 1600));
add(new Person("Vere", "Hervey", "Java programmer", "male", 22, 1200));
add(new Person("Maude", "Jaimie", "Java programmer", "female", 33, 1900));
add(new Person("Shawn", "Randall", "Java programmer", "male", 33, 2300));
add(new Person("Jayden", "Corrina", "Java programmer", "female", 33, 1700));
add(new Person("Palmer", "Dene", "Java programmer", "male", 33, 2000));
add(new Person("Addison", "Pam", "Java programmer", "female", 34, 1300));
}
};
System.out.println("Serial:" + javaProgrammers.stream().filter(person -> person.age == 33).findFirst().toString());
System.out.println("Parallel:" + javaProgrammers.parallelStream().filter(person -> person.age == 33).findFirst().toString());
这里我在比较
stream()
和 parallelStream()
,我期望在 stream()
调用中总是返回 Brittany Tamsen
,因为这是第一个匹配项。但对于 parallelStream()
,我并不期望总是返回 Brittany Tamsen
,因为它可以是任何匹配项之一,我期望它并行运行。但问题在于它也总是返回
Brittany Tamsen
。所以看起来它并没有并行运行。我错过了什么吗?
List <Person> javaProgrammers = Arrays.asList(new Person(...),new Person(...),...);
,它更短且更高效。如果您真的需要一个可调整大小的ArrayList
,则可以将该列表传递给ArrayList
的构造函数或构造一个最初为空的ArrayList
并使用Collections.addAll
,在任何情况下,您都需要在简洁性和效率之间做出一些小的权衡,但这仍然比双花括号子类化(可能会导致内存泄漏)更好。 - Holger