java - 避免向泛型列表多次添加内容

标签 java list generics arraylist

我创建自定义节点,左侧一个圆圈,右侧一个圆圈。 每次连接两个节点时,我想设置Boolean leftBoolean right为真。当我将两个节点连接到一个节点时,我想将两者设置为 Boolean rightleft为真。目前,我添加了多个条目,但没有更新我的泛型内容。

我的代码:

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 已在我的列表中,则应更新 leftright 。有任何想法吗?喜欢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/

相关文章:

generics - 简单的 Swift 泛型难题

Java Mail - XML 和 HTML 表

java - -XX :MaxPermSize with or without -XX:PermSize

java - 我们如何将 log4j 消息存储到 java util 列表

c# - 具有继承基类的 LINQ 通用查询?

java - 执行通用 Java 类

java - 打开通知后 fragment 不会更新

java - 使用 Comparator 返回具有 max 属性的值列表

Python 列表删除项目,即使没有明确告知

python - Pandas 重采样的问题