Observablevalue同等地检查新旧值

时间:2018-01-16 15:00:18

标签: javafx observable

事实上,我有一个班级负责收集网站帖子URL。我在分析每个页面网站时得到的文章

+http://dantri.com.vn/xa-hoi.htm
+http://dantri.com.vn/xa-hoi/trang-2.htm
....
+http://dantri.com.vn/xa-hoi/trang-9998.htm
+http://dantri.com.vn/xa-hoi/trang-n.htm

到属性网址如下。

 public class Pagination {

    private final StringProperty postURL = new SimpleStringProperty();

    public String getPostURL() {
        return postURL.get();
    }

    public void setPostURL(String value) {
        postURL.set(value);
    }

    public StringProperty postURLProperty() {
        return postURL;
    }

    public void gather() {
      for (int i = 0; i < n; i++) {

        for (String url : getAllURLToPage("http://dantri.com.vn/xa-hoi/trang-"+i+".htm")) {
            setPostURL(url);
        }
     }
    }
}

来自第http://dantri.com.vn/xa-hoi/trang-9998.htm===->http://dantri.com.vn/xa-hoi/trang-n.htm页。

post url值是常量,所以我想在连续url相等时终止程序,例如newValue.equals(oldValue),如下所示

public static void main(String[] args) {
        Pagination pagination = new Pagination();
        pagination.postURLProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                if (newValue.equals(oldValue)) {
                    System.out.println("BREAK");
                }
            }
        });
        pagination.gather();
    }

这只是newValue的例子,而oldValue总是与observableValue不相等。

我希望你能帮助我解决我的问题,我怎样才能控制帖子网址

1 个答案:

答案 0 :(得分:2)

正如我在评论中指出的那样,为了响应属性中的更改,会调用ChangeListener。如果您调用postURL.set(...)并传递当前在postURL中保存的相同值,则不会调用更改侦听器。 (TBH,目前尚不清楚该物业的目的是什么。)

您可以直接在for循环中执行此操作:

public void gather() {
  for (int i = 0; i < n; i++) {

    for (String url : getAllURLToPage("http://dantri.com.vn/xa-hoi/trang-"+i+".htm")) {
        if (Objects.equals(url, getPostURL())) {
            System.out.println("BREAK");
        }
        setPostURL(url);
    }
 }
}

或者可能在set方法中,假设您没有在其他地方拨打postURL.set(...)

public void setPostURL(String value) {
    if (Objects.equals(value, postURL.get())) {
        System.out.println("BREAK");
    }
    postURL.set(value);
}

但是ChangeListener无法检测到缺少变更。