JavaFX – FilteredList Beispiele

Veröffentlicht von

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)