Итак, я только что изучал новую Java 8, особенно лямбды и дату и время 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
Ваша помощь очень ценится. Спасибо.
sorted
предоставляетсяscala.collection.SeqLike
только, и он просто делегирует _ 3_: GitHub.Com/Scala/Scala/blob/master/src/library/scala/collection/ Итак, сама сортировка никогда не будет параллельной, только преобразование в массив Java и обратно может. - person Jörg W Mittag   schedule 02.05.2014