Sya*_*m S 33 java parallel-processing lambda scala java-stream
所以我只是学习新的Java 8,特别是lambdas和日期和时间api.我把它与scala进行比较.我的基本想法是找到命令行,流和并行流之间的执行时间差异.所以我决定创建一个Library应用程序并执行搜索,过滤,排序等操作.我创建了一个Library类,其中包含一个名为books的列表字段,并填充了1000本书.然后为搜索创建了一个功能界面,并在所有三种样式中进行了一些操作.一切都很好.我的代码是:
// Functional Interface
interface Search<T> {
    public void search(T t);
}
// Library class
final Library library = new Library();
// This just creates some random book objects.
final List<Book> books = collectBooks();
final Search<List<Book>> parallelSearch = (bks) -> library.findAndPrintBooksParallel(bks);
// Parallel Operations
private void findAndPrintBooksParallel(List<Book> books) {
    books.parallelStream()
        .filter(b -> b.getAuthor().equals("J.K. Rowling"))
        .sorted((x,y) -> x.getAuthor().compareTo(y.getAuthor()))
        .map(Book::getIsbn)
        .forEach(Library::waitAndPrintRecord);
}
现在我尝试在scala中重新创建相同的程序,看看执行是否更快?令人惊讶的是scala不允许我进行并行排序(或者可能是我在这里无知).我的scala库是
// Again some random book objects as a list
val books = collectBooks
// Parallel operation
books.par filter(_.author == "J.K. Rowling") map (_.isdn) foreach waitAndPrint
这里books.par给出了一个ParSeq.这没有排序方法.有没有什么方法可以用scala中的书籍列表创建并行排序.所以我可以这样写:
books.par filter(_.author == "J.K. Rowling") sortWith (_.author < _.author) map (_.isdn) foreach waitAndPrint
非常感谢您的帮助.谢谢.
人们可以在scala中实现并行排序,例如http://blog.yunglinho.com/blog/2013/03/19/parallel-external-merge-sort/。我不知道为什么 ParSeq 不在其 API 中提供排序功能。请注意,有许多替代方案.par,因此不一定假设 ParSeq 的结果代表了一般的 Scala 并行性。(但是基准很有价值,我祝愿你的基准一切顺利)。