性能-如何有效地使用Java 8来提高性能?

时间:2019-06-24 08:31:12

标签: java performance java-8

如何在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 个答案:

答案 0 :(得分:1)

在您的情况下,使用流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;
}  

答案 1 :(得分:0)

我相信Element::isSubElementsPresent检查subElements字段是否不为空,但是如果您更改代码以使您始终具有非空字段(例如,空列表),那么我们可以构建以下管道< / p>

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);
}

无论如何它不会比您已经拥有的