Java 8 并行排序 vs Scala 并行排序
2022-09-01 09:06:14
所以我只是在学习新的Java 8,特别是lambdas和日期和时间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
这里给出了一个ParSeq。这没有排序方法。有没有办法在scala中创建一个并行排序,我的书单。所以我可以这样写:books.par
books.par filter(_.author == "J.K. Rowling") sortWith (_.author < _.author) map (_.isdn) foreach waitAndPrint
非常感谢您的帮助。谢谢。