我创建自定义节点,左侧一个圆圈,右侧一个圆圈。
每次连接两个节点时,我想设置Boolean left
或Boolean right
为真。当我将两个节点连接到一个节点时,我想将两者设置为 Boolean right
和left
为真。目前,我添加了多个条目,但没有更新我的泛型内容。
我的代码:
public static List<NodeList<Boolean,Boolean,String>> connectList = new ArrayList<NodeList<Boolean,Boolean,String>>();
private String linkedNodeID;
private Boolean right = false;
private Boolean left = false;
和实际的代码,这是我通过在leftTrue()
内添加always而犯下的实际错误。/rightTrue()
:
public void leftTrue(){
left = true;
connectList.add(new NodeList<Boolean, Boolean, String>(left, right, linkedNodeID));
}
public void rightTrue(){
right = true;
connectList.add(new NodeList<Boolean, Boolean, String>(left, right, linkedNodeID));
}
我得到的是:
right connected: false ,left connected: true ,ID: 81def74e-4cb6-428c-b7ca-a57279534814
right connected: true ,left connected: false ,ID: 46514df2-da7a-41e0-bdd7-43e6f15b4220
right connected: true ,left connected: true ,ID: 46514df2-da7a-41e0-bdd7-43e6f15b4220
right connected: true ,left connected: false ,ID: 2e85f320-43cf-4d83-8670-4e917f31cd25
我想要的是:
right connected: false ,left connected: true ,ID: 81def74e-4cb6-428c-b7ca-a57279534814
right connected: true ,left connected: true ,ID: 46514df2-da7a-41e0-bdd7-43e6f15b4220
right connected: true ,left connected: false ,ID: 2e85f320-43cf-4d83-8670-4e917f31cd25
有什么想法如何设置左/右连接而不向我的列表添加另一个条目吗?
编辑:
public void registerSource(String linkId, DragNode linkNode) {
linkedNodeID = linkNode.getId();
double nodeWidth1 = linkNode.getWidth()/2;
if(DragNode.linkNodeOneX <= nodeWidth1){
leftTrue();
}else{
rightTrue();
}
}
public void registerTarget(String linkId, DragNode linkNode) {
linkedNodeID = linkNode.getId();
double nodeWidth2 = linkNode.getWidth()/2;
if( DragNode.linkNodeTwoX < nodeWidth2){
leftTrue();
testprint();
}else{
rightTrue();
}
}
编辑2:
我的问题是,每当我调用leftTrue();
时我创建了一个新的 connectList.add(new NodeList<Boolean, Boolean, String>(left, right, linkedNodeID));
条目,但如果某个 ID 已在我的列表中,则应更新 left
或right
。有任何想法吗?喜欢connectList.get(i).getL();
然后,如果这等于另一个 Id,则设置 right/false = true;
编辑3:
public void leftTrue(){
left = true;
}
public void rightTrue(){
right = true;
}
public void registerSource(String linkId, DragNode linkNode) {
linkedNodeID = linkNode.getId();
double nodeWidth1 = linkNode.getWidth()/2;
if(DragNode.linkNodeOneX <= nodeWidth1){
leftTrue();
}else{
rightTrue();
}
if(left || right){
connectList.add(new NodeList<Boolean, Boolean, String>(left, right, linkedNodeID));
left = false;
right = false;
}
}
public void registerTarget(String linkId, DragNode linkNode) {
linkedNodeID = linkNode.getId();
double nodeWidth2 = linkNode.getWidth()/2;
if( DragNode.linkNodeTwoX < nodeWidth2){
leftTrue();
}else{
rightTrue();
}
if(left || right){
connectList.add(new NodeList<Boolean, Boolean, String>(left, right, linkedNodeID));
left = false;
right = false;
}
}
最佳答案
存储这些左值和右值,并在确定它们是左、右还是两者后仅使用它们一次来创建新节点。
if( DragNode.linkNodeTwoX < nodeWidth2){
leftTrue();
}else{
rightTrue();
}
if(left || right){
connectList.add(new NodeList<Boolean, Boolean, String>(left, right, linkedNodeID));
left = false;
right = false;
}
public void leftTrue(){
left = true;
}
public void rightTrue(){
right = true;
}
关于java - 避免向泛型列表多次添加内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41068673/