使用java ID插入到列表中

使用java ID插入到列表中,java,Java,目前,我有一个方法可以将另一个名为Aptitude的类中的行为插入到列表中。行为有一个ID,我想将创建的下一个行为插入到列表中,而下一个可用ID不在整个列表中。 我是这样做的: public Behavior addBehavior(BehaviorDto behaviorDto, String aptitudeId) { Aptitude aptitude; aptitude = findById(aptitudeId); List<Behavior> be

目前,我有一个方法可以将另一个名为Aptitude的类中的行为插入到列表中。行为有一个ID,我想将创建的下一个行为插入到列表中,而下一个可用ID不在整个列表中。 我是这样做的:

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;
        }
    }
我希望能“了解”下一个面向对象的可用行为id


您可以将id生成移动到行为的构造函数:

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

您可以展示addBehavior方法的其余部分吗?如何按id对列表进行排序,然后遍历,直到条目的id+1!=下一个条目的id?或使用映射存储id到行为的映射,或使用集合作为所有已使用id的辅助存储。一个干净的解决方案可能是使您的行为实现接口的可比性,并使用compareTo方法按java api文档中描述的id排序。当你得到一个列表时,只需使用Collections.sort对其进行排序,然后使用列表的大小+2添加一个元素,就像你的算法从id=1开始一样。你没有考虑过这一点,但这不会使不同能力的行为的计数器增加吗?。我是说两个不同的列表会有完全不同的ID?或者原子整数atribute修复了这个问题?是的,两个不同的列表将具有完全不同的ID。AtomicInteger仅用于多线程。如果只使用一个线程,则可以将其更改为:private static int counter;在构造函数中:this.id=++计数器;
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;
}