Java列表按日期过滤

Lig*_*ght 4 java collections javafx filter java-stream

我尝试使用我的第一个过滤器,FilteredList但当然它不起作用.

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());

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

应显示一个日期,但显示两个.我究竟做错了什么 ?

puh*_*len 8

您的方法不会过滤列表,而是将元素复制到新列表中,并过滤掉一些元素.这使原始版本保持不变.您需要将此新列表分配给变量以使用它.

但是,您正在使用FilteredList该类,该类提供另一个列表的筛选视图.您可以使用该setPredicate方法设置过滤器谓词

filteredList.setPredicate(p -> p.getData().isAfter(LocalDate.of(2012, Month.JUNE, 2)));
Run Code Online (Sandbox Code Playgroud)

或者在构造函数中作为第二个参数

 FilteredList<CashBalance> filteredList = new FilteredList<CashBalance>(cashBalanceList, p -> p.getData().isAfter(LocalDate.of(2012, Month.JUNE, 2)));
Run Code Online (Sandbox Code Playgroud)