我有一个
这是一个
和
这也是一个
..。
然后,我想用它来显示
设置过滤器时过滤的数据
,但也要能够
必要时恢复
..。以下是MCVE:
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();
}
}类过滤器,我用它来过滤数据:
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)
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项目的,因此我确实需要使用
__。
发布于 2014-06-27 14:06:03
问题
public void setData(ObservableList data) {
this.data = data;
}解释
如果您想知道Java是否遵守
按值传递
以及
masterData
应该已经复制到列表中
数据
..。你是对的!但这个故事只有一点小转折!
在以下情况下
原语
,则传递这些值,但在对象的情况下,
对象引用是通过值传递的
..。
因此,您引用的是
masterData
,而不是将值复制到新列表中!
解决方案
this.data = FXCollections.observableArrayList(data);这将为创建一个新对象
数据
引用,所有的操作都将在这个新对象的数据上完成。
https://stackoverflow.com/questions/24441810
复制相似问题