Является ли этот код безопасным, используя Java 8 Lambdas - stream.forEach - PullRequest
3 голосов
/ 23 марта 2019

Предположим, у меня есть список элементов книги: List<Book> libraryBooks и следующий код:

List<BookAuthor> authors = new ArrayList<>();
libraryBooks.stream().forEach(e -> {
                                     authors.add(createAuthor(e));
                                   });

Я посмотрел вокруг и нашел похожие вопросы (например, здесь )но я еще не убежден.Потому что я читал книгу на эту тему, и книга, кажется, указывает на то, что вышеупомянутое может ввести условия гонки, если поток был запущен параллельно - но я не использую параллельный поток, поэтому вышеупомянутый предмет зависит от условий гонки?Или книга неверна / вводит в заблуждение?

Вот выдержка из книги, на которую я ссылаюсь: enter image description here

1 Ответ

0 голосов
/ 23 марта 2019

Если вам нужно создать новый список элементов, применив функцию к каждому из элементов, тогда map - это функция, которую вы должны использовать. Вот как вы должны написать это:

List<BookAuthor> authors = libraryBooks.stream()
            .map(e -> createAuthor(e))
            .collect(Collectors.toList());
...