@Override
    protected List<PlcReadRequest> processReadRequest(PlcReadRequest readRequest, DriverContext driverContext) {
        if(readRequest.getNumberOfTags() == 1) {
            return Collections.singletonList(readRequest);
        }
        List<PlcReadRequest> subRequests = new ArrayList<>(readRequest.getNumberOfTags());
        for (String tagName : readRequest.getTagNames()) {
            PlcTag tag = readRequest.getTag(tagName);
            PlcReadRequest subRequest = new DefaultPlcReadRequest(
                ((DefaultPlcReadRequest) readRequest).getReader(),
                // We are only expecting valid tagItems being passed in.
                new LinkedHashMap<>(Collections.singletonMap(tagName, new DefaultPlcTagItem<>(tag))));
            subRequests.add(subRequest);
        }
        return subRequests;
    }
Optimizer variant which automatically splits a multi-item request up into multiple single item requests.
plc4j/spi/src/main/java/org/apache/plc4x/java/spi/optimizer/SingleTagOptimizer.java