我在内部循环中有一个循环,用于从seconde循环中删除元素,列表中的内容必须执行某些操作。我希望优化迭代和比较,可以做到吗?
如何优化下面显示的逻辑以避免太多的代码行
public MEntity getBuffer(String entityName, String Buffer, String... ignoreFields) {
McgEntity entity = getElementsByEntityFromXml(entityName);
int minLenghtOfEntities = 0;
List<McgField> fieldsToRemove = new ArrayList<>();
if (ignoreFields != null && ignoreFields.length > 0) {
for (int i = 0; i < ignoreFields.length; i++) {
for (McgField field : entity.getFieldList()) {
if (field.getFieldName().contains(ignoreFields[i])) {
minLenghtOfEntities += field.getFieldLength();
fieldsToRemove.add(field);
}
}
}
entity.setLengthBuffer(entity.getLengthBuffer() - minLenghtOfEntities);
entity.getFieldList().removeAll(fieldsToRemove);
}
....
}
答案 0 :(得分:0)
minLenghtOfEntities += field.getFieldLength();
之后,缺少中断。
使用流,代码变得更加结构化,首先收集要删除的字段,然后纠正实体长度。
public MEntity getBuffer(String entityName, String buffer, String... ignoreFields) {
Objects.requireNonNull(ignoreFields);
McgEntity entity = getElementsByEntityFromXml(entityName);
List<McgField> fieldsToRemove = entity.getFieldList().stream()
.filter(f -> Arrays.stream(ignoreFields)
.anyMatch(f.getFieldName()::contains))
.collect(Collectors.toList());
int minLenghtOfEntities = fieldsToRemove.stream()
.mapToInt(McgField::getFieldLength).sum();
entity.setLengthBuffer(entity.getLengthBuffer() - minLenghtOfEntities);
entity.getFieldList().removeAll(fieldsToRemove);
...
}
不幸的是,由于contains
,Set<String> ignoreFields
并不更好。