Как эффективно обрабатывать потоковый ввод с помощью 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?

0 ответов

Другие вопросы по тегам