我尝试在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());
}
}
}
应显示一个日期,但显示两个日期。我在做什么错了?
答案 0 :(得分:8)
您的方法不会过滤列表,而是将元素复制到新列表中,并过滤掉一些元素。这使原始文件保持不变。您需要将此新列表分配给变量以使用它。
但是,您正在使用FilteredList
类,该类提供了另一个列表的过滤视图。您可以使用setPredicate
方法设置过滤条件谓词
filteredList.setPredicate(p -> p.getData().isAfter(LocalDate.of(2012, Month.JUNE, 2)));
或在构造函数中作为第二个参数
FilteredList<CashBalance> filteredList = new FilteredList<CashBalance>(cashBalanceList, p -> p.getData().isAfter(LocalDate.of(2012, Month.JUNE, 2)));
答案 1 :(得分:1)
更改为:
filteredList =
filteredList
.stream()
.filter(
p -> p.getData().isAfter(LocalDate.of(2012, Month.JUNE, 2))
).collect(Collectors.toList());