【问题标题】:Java 8 parallel sorting vs Scala parallel sortingJava 8 并行排序与 Scala 并行排序
【发布时间】:2014-06-18 22:46:27
【问题描述】:

所以我只是在学习新的 Java 8,特别是 lambda 和日期和时间 API。我正在将它与scala进行比较。我的基本想法是找到命令式、流和并行流之间的执行时间差异。所以我决定创建一个图书馆应用程序并执行一些操作,如搜索、过滤、排序等。我创建了一个图书馆类,其中包含一个名为书籍的列表字段,并用 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

非常感谢您的帮助。谢谢。

【问题讨论】:

标签: java scala lambda parallel-processing java-stream


【解决方案1】:

可以在 scala 中实现并行排序,例如http://blog.yunglinho.com/blog/2013/03/19/parallel-external-merge-sort/ 。我不知道为什么 ParSeq 不在其 API 中提供排序。请注意,.par 有许多替代方案,因此不必假设 ParSeq 的结果通常代表 Scala 并行性。 (但基准很有价值,我希望你能顺利完成)。

【讨论】:

    【解决方案2】:

    我对 scala 非常陌生,但就我的理解而言:排序本身永远不会是并行的,只有与 Java 数组之间的转换可能。 sorted 仅由 scala.collection.SeqLike 提供 试试这个链接: GitHub.Com/Scala/Scala/blob/master/src/library/scala/collection/...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 2023-03-05
      • 2018-03-08
      相关资源
      最近更新 更多