使用ID java

时间:2017-02-21 12:23:35

标签: java

目前我有一种方法可以将行为插入另一个名为 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;

2 个答案:

答案 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;
}