Hier ein paar Beispiele wie man „javafx.collections.transformation.FilteredList“ verwenden kann.
FilteredList mit einer Liste filtern
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
public class DemoFilterWith2Loops {
public static void main(String[] args) {
ObservableList<Person> listPerson = FXCollections.observableArrayList();
listPerson.add(new Person(18, "Max"));
listPerson.add(new Person(20, "Tommy"));
listPerson.add(new Person(25, "Luke"));
listPerson.add(new Person(30, "Jan"));
listPerson.add(new Person(35, "Jens"));
listPerson.add(new Person(40, "Karl"));
listPerson.add(new Person(45, "Paul"));
listPerson.add(new Person(50, "Maik"));
List<Integer> searchByAge = Arrays.asList(20, 30, 40);
List<Function<Person , Boolean>> allPredicates = new ArrayList<>();
for (Integer age : searchByAge) {
allPredicates.add(p -> p.getAge() == age);
}
FilteredList<Person> filteredList= new FilteredList<>(listPerson, p -> true);
filteredList.setPredicate(createPredicate(allPredicates));
System.out.println("--- FilteredList ---");
for (Person person : filteredList) {
System.out.println(person.toString());
}
}
private static Predicate<Person> createPredicate(List<Function<Person, Boolean>> allPredicates) {
return (Person anPerson) -> {
return allPredicates.stream().anyMatch(p -> p.apply(anPerson));
};
}
}
class Person {
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
// Getter
public int getAge() {return age;}
public String getName() {return name; }
// Setter
public void setAge(int age) { this.age = age;}
public void setName(String name) {this.name = name;}
@Override
public String toString() {
return "Age[" + age + "] Name[" + name + "]";
}
}Code-Sprache: PHP (php)
FilteredList mit Object change Listener
ObservableList<Item> baseList = FXCollections.observableArrayList(item ->
new Observable[] {item.filteredProperty()});
FilteredList<Item> list = new FilteredList<>(baseList, t -> !t.isFiltered());
list.addListener((Change<? extends Item> c) -> {
while (c.next()) {
if (c.wasAdded()) {
System.out.println(c.getAddedSubList()+ " added to filtered list");
}
if (c.wasUpdated()) {
System.out.println(c.getAddedSubList()+ " added to filtered list");
}
if (c.wasRemoved()) {
System.out.println(c.getRemoved()+ " removed from filtered list");
}
}
});
public static class Item {
private final StringProperty name = new SimpleStringProperty() ;
private final BooleanProperty filtered = new SimpleBooleanProperty() ;
public Item(String name) {
setName(name);
}
// Properties
public final StringProperty nameProperty() {return this.name;}
public final BooleanProperty filteredProperty() {return this.filtered;}
// Getter
public final String getName() {return this.nameProperty().get();}
public final boolean isFiltered() {return this.filteredProperty().get();}
// Setter
public final void setName(final String name) {this.nameProperty().set(name);}
public final void setFiltered(final boolean filtered) {this.filteredProperty().set(filtered);}
@Override
public String toString() {
return getName();
}
}Code-Sprache: PHP (php)