I try use my first filter in FilteredList but of course it doesn't work. 
public class ListRemove {
    public static void main(String[] args) {
        ObservableList<CashBalance> cashBalanceList = FXCollections.observableArrayList();
        LocalDate f1 = LocalDate.of(2011, Month.JANUARY, 1);
        LocalDate f2 = LocalDate.of(2015, Month.AUGUST, 2);
        CashBalance c1 = new CashBalance();
        CashBalance c2 = new CashBalance();
        c1.setData(f1);
        c2.setData(f2);
        cashBalanceList.setAll(c1, c2);
        FilteredList<CashBalance> filteredList = new FilteredList<CashBalance>(cashBalanceList);
        filteredList.stream().filter(p -> p.getData().isAfter(LocalDate.of(2012, Month.JUNE, 2)))
                .collect(Collectors.toList());
        for (CashBalance l : filteredList) {
            System.out.println(l.getData());
        }
    }
}
Should show one date but two are displayed. What am I doing wrong ?
Your approach does not filter the list, but copies the elements to a new list, with some elements filtered out. This leaves the original unchanged. You need to assign this new list to a variable to make use of it.
However, you are using the FilteredList class, which provides a filtered view of another list.  You can set the filter predicate using the setPredicate method
filteredList.setPredicate(p -> p.getData().isAfter(LocalDate.of(2012, Month.JUNE, 2)));
Or in the constructor as the second parameter
 FilteredList<CashBalance> filteredList = new FilteredList<CashBalance>(cashBalanceList, p -> p.getData().isAfter(LocalDate.of(2012, Month.JUNE, 2)));
                        change to:
filteredList = 
    filteredList
     .stream()
     .filter(
               p -> p.getData().isAfter(LocalDate.of(2012, Month.JUNE, 2))
    ).collect(Collectors.toList());
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With