JAX-RS поддерживает стандартные / пользовательские HTTP-коды. См. ResponseBuilder и ResponseStatus, например:
Имейте в виду, что информация JSON больше связана с данными, связанными с ресурсом / приложением. Коды HTTP больше относятся к статусу запрашиваемой операции CRUD. (по крайней мере, так оно и должно быть в системах REST-ful)
Если у вас есть только Iterator
(в отличие от Iterable
или Spliterator
), это, вероятно, не стоит распараллеливать. В Эффективная Java Джош Блох утверждает, что:
Даже в лучших обстоятельствах распараллеливание конвейера вряд ли увеличит его производительность, если источник из
Stream.iterate
или используется промежуточная операцияlimit
.У
Iterator
есть только методnext
, который (как правило) должен вызываться последовательно. Таким образом, любая попытка распараллеливания будет делать то, что делаетStream.iterate
: последовательно запускает поток, а затем отправляет данные другим потокам. Есть много накладных расходов, которые поставляются с этой передачей, и кеш не на вашей стороне вообще. Есть хороший шанс, что это не будет стоить того, за исключением, может быть, если у вас есть несколько элементов для перебора, и у вас будет много работы над каждым. В этом случае вы можете также поместить их все вArrayList
и распараллеливаться оттуда.
Это другая история, если вы можете получить разумно параллелизуемый
Stream
. Вы можете получить их, если у вас хорошиеIterable
илиSpliterator
. Если у вас есть хорошийSpliterator
, вы можете получитьStream
с помощью методовStreamSupport.stream
. ЛюбойIterable
имеет методspliterator
. Если у вас естьCollection
, используйте методparallelStream
.A
Map
в Java имеет пары ключ-значение, поэтому я не совсем уверен, что вы означает «помещать в HashMap». Для этого ответа я предполагаю, что вы имеете в виду, что вы делаете вызов методаput
, где ключ является одним из элементов и значениемBoolean.TRUE
. Если вы обновите свой вопрос, я могу дать более конкретный ответ.В этом случае ваш код может выглядеть примерно так:
public static <E> Map<E, Boolean> putInMap(Stream<E> elements) { return elements.parallel() .collect(Collectors.toConcurrentMap(e -> e, e -> Boolean.TRUE, (a, b) -> Boolean.TRUE)); }
e -> e
is ключ-ключ, создающий его так, чтобы клавишами были элементы.e -> Boolean.TRUE
является преобразователем значений, поэтому его значения равны true.(a, b) -> Boolean.TRUE
- это функция слияния, решая, как объединить два элемента в один.
Параллельные потоки, собранные в Collectors.toMap , уже будут обрабатывать поток по нескольким потокам, а затем объединить на потоковые карты в качестве последнего шага. Или в случае toConcurrentMap
несколько потоков будут обрабатывать поток и объединять данные в поточно-безопасную карту.