如何在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;
}
答案 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);
}
无论如何它不会比您已经拥有的