我试图了解 parallelStream()
在 java 8 中的行为。这是我的示例代码。
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()
,我希望 Brittany Tamsen
总是在 stream()
调用中返回,因为这是第一个匹配项。但是对于 parallelStream()
我不希望 Brittany Tamsen
返回 总是 因为它可以是任何匹配项之一,因为我希望它并行运行。但问题是它也总是返回
Brittany Tamsen
。所以它看起来不像是并行运行的。我在这里错过了什么吗?
最佳答案
除了 Bohemian 的回答之外,重要的是要补充一点,是的,findFirst()
将返回匹配谓词的第一个元素,无论流是否并行,因为在这种情况下流具有遇到顺序(从列表创建)。
相反, findAny()
可以自由地返回与谓词匹配的任何元素(因此,如果您并不真正关心返回哪个匹配元素,则应该是首选,因为它可能允许在并行流的情况下更快地返回)。
关于java-8 - java 8 中的 parallelStream() 是否保证顺序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40583054/