目前我有一种方法可以将行为插入另一个名为 Aptitude 的类的List中。行为有一个ID,我想插入创建到列表中的下一个行为,下一个可用的ID不在整个List中。 我是这样做的:
public Behavior addBehavior(BehaviorDto behaviorDto, String aptitudeId) {
Aptitude aptitude;
aptitude = findById(aptitudeId);
List<Behavior> behaviors = aptitude.getBehaviors();
int nextId = -1;
boolean flag;
for (int i = 1; i <= behaviors.size() + 1; i++) {
flag = true;
for (Behavior behavior1 : behaviors) {
if (Integer.parseInt(behavior1.getId()) == i) {
flag = false;
continue;
}
}
if (flag) {
nextId = i;
break;
}
}
但我记得被告知有一种方法可以优化,而不需要使用标志变量。
如何改进此代码?
方法的其余部分:
Behavior behavior = new Behavior(String.valueOf(nextId), behaviorDto.getEn(), behaviorDto.getEs());
behavior.setId(String.valueOf(nextId));
aptitude.addBehavior(behavior);
updateAptitude(aptitude);
return behavior;
答案 0 :(得分:1)
我希望Aptitude
知道&#39;下一个可用的行为id (面向对象)。
public Behavior addBehavior(BehaviorDto behaviorDto, String aptitudeId) {
Aptitude aptitude = findById(aptitudeId);
List<Behavior> behaviors = aptitude.getBehaviors();
int nextId = aptitude.getNextBehaviorId()
// ...
}
答案 1 :(得分:0)
您可以将id生成移动到Behavior的构造函数:
class Behavior {
private static AtomicInteger counter = new AtomicInteger(0);
public Behavior(BehaviorDto behaviorDto) {
\\other constructor things
this.id = counter.incrementAndGet();
}
}
完成此操作后,您可以这样做:
public Behavior addBehavior(BehaviorDto behaviorDto, String aptitudeId) {
Aptitude aptitude;
aptitude = findById(aptitudeId);
List<Behavior> behaviors = aptitude.getBehaviors();
Behavior newBehavior = new Behavior(behaviorDto);
behaviors.add(newBehavior);
return newBehavior;
}