wffweb/src/main/java/com/webfirmframework/wffweb/tag/repository/TagRepository.java
public AbstractHtml findOneTagByTagName(final boolean parallel,
            final String tagName) throws NullValueException {

        if (tagName == null) {
            throw new NullValueException("The tagName should not be null");
        }

        final Collection<Lock> locks = getReadLocks(rootTags);
        for (final Lock lock : locks) {
            lock.lock();
        }

        try {
            final Optional<AbstractHtml> any = buildAllTagsStream(parallel)
                    .filter(tag -> {
                        return tagName.equals(tag.getTagName());
                    }).findAny();

            if (any.isPresent()) {
                return any.get();
            }

            return null;
        } finally {
            for (final Lock lock : locks) {
                lock.unlock();
            }
        }
    }
public AbstractHtml findOneTagByTagName(final boolean parallel,
            final String tagName) throws NullValueException {

        if (tagName == null) {
            throw new NullValueException("The tagName should not be null");
        }

        final Collection<Lock> locks = getReadLocks(rootTags);
        for (final Lock lock : locks) {
            lock.lock();
        }

        try {
            final Optional<AbstractHtml> any = buildAllTagsStream(parallel)
                    .filter(tag -> {
                        return tagName.equals(tag.getTagName());
                    }).findAny();

            if (any.isPresent()) {
                return any.get();
            }

            return null;
        } finally {
            for (final Lock lock : locks) {
                lock.unlock();
            }
        }
    }
Finds and returns the first (including the nested tags) matching with the
given tag name.

@param parallel
true to internally use parallel stream. If true it
will split the finding task to different batches and
will execute the batches in different threads in
parallel consuming all CPUs. It will perform faster
in finding from extremely large number of tags but at
the same time it will less efficient in finding from
small number of tags.
@param tagName
the name of the tag.
@return the first matching tag with the given tag name.
@throws NullValueException
if the {@code tagName} is null
@since 3.0.0
@author WFF