java 8 parallelStream() with sorted()

19 浏览
0 Comments

java 8 parallelStream() with sorted()

JDK 8 EA现已发布,我正在尝试适应lambda和新的Stream API。我尝试使用并行流对列表进行排序,但结果总是错误的:

import java.util.ArrayList;
import java.util.List;
public class Test
{
    public static void main(String[] args)
    {
        List list = new ArrayList<>();
        list.add("C");
        list.add("H");
        list.add("A");
        list.add("A");
        list.add("B");
        list.add("F");
        list.add("");
        list.parallelStream() // 并行处理,不仅仅是并发处理!
            .filter(s -> !s.isEmpty()) // 移除空字符串
            .distinct() // 移除重复项
            .sorted() // 排序
            .forEach(s -> System.out.println(s)); // 打印每个项
    }
}

输出:

C
F
B
H
A

请注意,每次输出都是不同的。我的问题是,这是一个bug吗?还是不可能并行排序列表?如果是这样,为什么JavaDoc没有说明呢?最后一个问题是,是否有另一种操作的输出结果会根据流类型而有所不同?

0