Я не очень понимают отличие findFirst() от findAny() в Java Stream API.
Я думал, что findFirst() возвращает первый элемент стрима, а findAny() случайны элемент стрима.
Но когда я запускаю 2 примера кода:
Stream.of(...).findFirst() и Stream.of(...).findAny()
То они оба возвращают первый элемент стрима. Почему? Они оба делают одинаковую задачу?
Они оба делают одинаковую задачу?
Нет. Согласно JavaDoc Stream#findAny():
Возвращает Optional<T>, хранящий некоторый элемент стрима, или
пустой Optional<T>, если стрим пуст. Поведение этой операции не
определено - он может выбрать любой элемент в потоке. Это позволяет
обеспечить максимальную производительность при параллельных операциях;
Т.е., при непараллельном стриме он вернет первый элемент. А при параллельном стриме он может вернуть любой элемент.
Тогда как Stream#findFirst() вернет Optional<T>, хранящий строго первый элемент потока.
Продвижение своими сайтами как стратегия роста и независимости