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)
应显示一个日期,但显示两个.我究竟做错了什么 ?
您的方法不会过滤列表,而是将元素复制到新列表中,并过滤掉一些元素.这使原始版本保持不变.您需要将此新列表分配给变量以使用它.
但是,您正在使用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)
| 归档时间: |
|
| 查看次数: |
551 次 |
| 最近记录: |