代码之家  ›  专栏  ›  技术社区  ›  Light

Java列表按日期筛选

  •  4
  • Light  · 技术社区  · 6 年前

    我试着用我的第一个过滤器 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());
    
            }
        }
    }
    

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

    2 回复  |  直到 6 年前
        1
  •  8
  •   puhlen    6 年前

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

    但是,您正在使用 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)));
    
        2
  •  1
  •   Morteza Jalambadani Robert Beltran    6 年前

    更改为:

    filteredList = 
        filteredList
         .stream()
         .filter(
                   p -> p.getData().isAfter(LocalDate.of(2012, Month.JUNE, 2))
        ).collect(Collectors.toList());