首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复制ObservableList java

复制ObservableList java
EN

Stack Overflow用户
提问于 2014-06-27 07:28:17
回答 1查看 10.8K关注 0票数 11

我有一个

这是一个

这也是一个

..。

然后,我想用它来显示

设置过滤器时过滤的数据

,但也要能够

必要时恢复

..。以下是MCVE:

代码语言:javascript
运行
复制
package br;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

public class Main{
    private static ObservableList masterData = FXCollections.observableArrayList();
    private static ObservableList filteredData = FXCollections.observableArrayList();
    static Filter filter = new Filter();
    public static void addDummy(){
        masterData.add(new Foo("a",1));
        masterData.add(new Foo("aa",3));
        masterData.add(new Foo("b",2));
        masterData.add(new Foo("bb",4));
        masterData.add(new Foo("c",3));
    }
    public static void printData(ObservableList list){
        for(Foo f: list) System.out.println(f.getName());
    }
    public static void main(String[] args) {
        addDummy();
        applyFilter(3);
        printData(filteredData);
        applyFilter(0);
        printData(filteredData);
    }
    public static void applyFilter(int num){
        filter.setData(masterData);
        filter.setFilter(num);
        filteredData = filter.getData();
    }
}

类过滤器,我用它来过滤数据:

代码语言:javascript
运行
复制
package br;

import java.util.ArrayList;
import java.util.List;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

public class Filter {
    private ObservableList data = FXCollections.observableArrayList();
    public void setFilter(int filter){
        List copy = new ArrayList(data);
        for(Foo f: copy)
            if(f.getBar() getData() {
        return data;
    }

    public void setData(ObservableList data) {
        this.data = data;
    }

}

类,它只是一个

字符串

和一个

整型

(加上getters /setters)

代码语言:javascript
运行
复制
package br;

public class Foo {
    private String name;
    private int bar;
    public Foo(String name, int bar){
        this.setBar(bar);
        this.setName(name);
    }
    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
    public int getBar() {return bar;}
    public void setBar(int bar) {this.bar = bar;}
}

当你运行这段代码时,你会得到:

aa

bb

C

当过滤器设置为3时(

它按照预期对数据进行了过滤

)和过滤器之后

“重置”为零

..。

如何确保筛选器始终使用

masterData

然后存储在

filteredData

什么?

注意:这是针对JavaFX项目的,因此我确实需要使用

__。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-27 14:06:03

问题

代码语言:javascript
运行
复制
public void setData(ObservableList data) {
    this.data = data;
}

解释

如果您想知道Java是否遵守

按值传递

以及

masterData

应该已经复制到列表中

数据

..。你是对的!但这个故事只有一点小转折!

在以下情况下

原语

,则传递这些值,但在对象的情况下,

对象引用是通过值传递的

..。

因此,您引用的是

masterData

,而不是将值复制到新列表中!

解决方案

代码语言:javascript
运行
复制
this.data = FXCollections.observableArrayList(data);

这将为创建一个新对象

数据

引用,所有的操作都将在这个新对象的数据上完成。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24441810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档