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