我收到一个型号清单。模型的数量可能很大。该模型具有许多特性,并且其中任何一个都可能为 null 。
我需要基于其属性为每个模型构建一个字符串。如果 property == null ,那么我将一些静态部分添加到结果字符串中,例如“ property1 is null” 。
如果 property!= null ,那么我添加类似这样的内容“ property1 =='valueOfThePropertyHere'” 。
结果字符串应如下所示:
prop1 == 'value1' and prop2 is null and prop3 == 'value3' and prop4 == 'value4' and prop5 is null and ..... propN == 'valueN'
然后我为列表中的每个模型生成这样的字符串。
很明显,我在for循环中执行此操作,为此我使用了StringBuilder。事实是,在StringBuilder的 append 方法中,我使用三元运算符检查了模型的每个字段是否为空,并基于此将检查结果添加到结果字符串中。但是,如果属性不为null,那么我需要添加一些静态部分+字段本身的值+一些更多静态内容。这意味着我需要为我拥有的每个属性再添加一个StringBuilder。或者我可以使用“ +”将其转换为StringBuilder,据我所知,在StringBuilder中使用“ +”是个坏习惯(但我还是必须使用它)。
示例:
List<Model> models = repository.getModels();
for (Model m: models) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder
.append(m.getField1() == null ? "field1 is null" : "field1 == '" + new StringBuiler().append(m.getField1()).append("'").append(" and ").toString()))
.append(m.getField2() == null ? "field2 is null" : "field2 == '" + new StringBuiler().append(m.getField2()).append("'").append(" and ").toString()))
...............
.append(m.getFieldN() == null ? "fieldN is null" : "fieldN == '" + new StringBuiler().append(m.getFieldN()).append("'").append(" and ").toString()));
System.out.println(stringBuilder.toString());
}
从性能的角度来看,它看起来不太好,因为对于模型列表中的每个模型,我都会在堆中创建另一堆StringBuilder对象,只是为了获得结果字符串。
我想念什么吗?从性能角度来看,有更好的方法吗?还是可以,因为我暂时没有其他选择。