Как эффективно обрабатывать потоковый ввод с помощью JXPath
У меня есть потоковый ввод с объектами, которые я хотел бы отфильтровать. Я пытаюсь сделать фильтрацию с использованием JXPath. Это означает, что у меня есть статический запрос xpath, который я могу предварительно скомпилировать, и у меня есть поток документов:
String xpath = ".[speedOverGround > 7 and destination = 'ROTTERDAM']";
CompiledExpression expr = JXPathContext.compile(xpath);
Stream<ShipInfo> shipsStream = ... ; // streaming data from external source
List<ShipInfo> matchingShips = shipsStream
.filter(ship -> {
Pointer match = expr.getPointer(JXPathContext.newContext(ship), null);
return match.getNode() != null;
})
.collect(Collectors.toList());
Решение выше работает, но относительно медленно. Может быть, потому что мне нужно каждый раз создавать новый контекст?
Есть ли более эффективный способ фильтрации входного потока с использованием JXPath?