производительность - Как я могу эффективно использовать Java 8 для повышения производительности? - PullRequest
0 голосов
/ 24 июня 2019

Как я могу эффективно написать следующий метод в Java 8? Я новичок в Streams API и хочу использовать его, если он действительно дает некоторое преимущество в производительности.

private String getValue(int bitNo, int subFieldNo) {
    String answer = null;
    Map<Integer, Element> elements = getElements();

    if (MapUtils.isNotEmpty(elements) && elements.containsKey(bitNo)) {
        Element element = elements.get(bitNo);

        if (element.isSubElementsPresent()) {
            List<SubElement> subFields = element.getSubElements();
            for (SubElement subElement : subFields) {
                if (subFieldNo == subElement.getStartPosition()) {
                    answer = subElement.getFieldValue();
                    break;
                }
            }
        }
        if (null == answer && !element.isSubElementsPresent()) {
            answer = element.getFieldValue();
        }
    }
    return answer;
}

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Я не вижу никакой пользы от использования потокового API в вашем случае. у вас есть избыточный код, который вы можете игнорировать.

1- MapUtils.isNotEmpty(elements) не обязательно. Вы можете игнорировать это.
2- Нет необходимости выделять временную переменную. как subFields

3 - удалить

if (null == answer && !element.isSubElementsPresent()) { answer = element.getFieldValue(); }

и используйте это answer = element.getFieldValue();

private String getValue(int bitNo, int subFieldNo) {
    String answer = null;
    Map<Integer, Element> elements = getElements();

    if (elements.containsKey(bitNo)) {
        Element element = elements.get(bitNo);
        answer = element.getFieldValue();
        if (element.isSubElementsPresent()) {
            for (SubElement subElement : element.getSubElements()) {
                if (subFieldNo == subElement.getStartPosition()) {
                    answer = subElement.getFieldValue();
                    break;
                }
            }
        }
    }
    return answer;
}  
0 голосов
/ 24 июня 2019

Я полагаю, Element::isSubElementsPresent проверяет, что поле subElements не является нулевым, но если вы измените код так, чтобы у вас всегда было ненулевое поле (например, пустой список), тогда мы можем построить следующий конвейер

private String getValue(int bitNo, int subFieldNo) {
    Map<Integer, Element> elements = getElements();

    Element element = elements.get(bitNo);
    if(element == null) {
        return null;
    }

    return element.getSubElements().stream()
            .filter(se -> se.getStartPosition() == subFieldNo)
            .map(SubElement::getFieldValue)
            .findAny()
            .orElseGet(element::getFieldValue);
}

в любом случае это не будет быстрее, чем у вас уже есть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...