Tôi có một MasterData là một ObservableList và filterData cũng là một ObservableList.Sao chép ObservableList java
Sau đó, tôi muốn sử dụng nó để hiển thị các dữ liệu đã lọc khi lọc được thiết lập, mà còn để có thể phục hồi bất cứ khi nào cần thiết, đây là MCVE:
package br;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
public class Main{
private static ObservableList<Foo> masterData = FXCollections.observableArrayList();
private static ObservableList<Foo> 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<Foo> 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();
}
}
Các bộ lọc lớp, mà tôi sử dụng để lọc dữ liệu:
package br;
import java.util.ArrayList;
import java.util.List;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
public class Filter {
private ObservableList<Foo> data = FXCollections.observableArrayList();
public void setFilter(int filter){
List<Foo> copy = new ArrayList<Foo>(data);
for(Foo f: copy)
if(f.getBar()<filter) data.remove(f);
}
public ObservableList<Foo> getData() {
return data;
}
public void setData(ObservableList<Foo> data) {
this.data = data;
}
}
và lớp Foo, mà chỉ là một tên Chuỗi và quầy bar int (cộng gett ERS/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;}
}
Khi bạn chạy mã này, bạn sẽ nhận được:
aa
bb
c
Cả hai khi bộ lọc được thiết lập để 3 (đã lọc dữ liệu như mong đợi) và sau khi bộ lọc là "đã được khôi phục" về không.
Làm thế nào tôi có thể chắc chắn rằng bộ lọc được luôn luôn xử lý với các dữ liệu trong masterData và sau đó lưu trữ trên filteredData?
Lưu ý: đây là một dự án JavaFX, vì vậy tôi thực sự cần sử dụng ObservableList.
Tôi chỉ muốn nói điều này đã giúp tôi, cảm ơn rất nhiều! Lớp FXCollections rất hữu ích trong nhiều trường hợp! – XaolingBao