Итак, я просто изучал новую 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
Здесь books.par
дает ParSeq. У этого метода сортировки нет. Есть ли способ создать параллельную сортировку с моим списком книг в scala. Поэтому я мог написать что-то вроде:
books.par filter(_.author == "J.K. Rowling") sortWith (_.author < _.author) map (_.isdn) foreach waitAndPrint
Ваша помощь очень ценится. Спасибо.