有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何按月份和年份过滤对象数组

我是Java新手,我有一个问题。我有一组对象:

List<Expense> expenses = er.findAll();

其中包括:

enter image description here

我想知道如何按月份和年份筛选此阵列

第一个例子是在10个月和2021年对数组进行筛选。

有什么建议吗


共 (3) 个答案

  1. # 1 楼答案

    除了@Avinds正确答案之外,我建议使用java.time.YearMonth来明确过滤的内容:

    YearMonth ymFilter = YearMonth.of(2021,10);
    
    List<Expense> result = expenses.stream()
                                   .filter(ex -> YearMonth.from(ex.getDate()).equals(ymFilter))
                                   .collect(Collectors.toList());
    
  2. # 2 楼答案

    可以像下面的示例中那样为每个循环使用一个

    int monthNumb = 10;
    for(expense ex : expenses) {
        if(ex.date == monthNumb) {
            /*behavior*/
        }
    }
    
  3. # 3 楼答案

    您可以使用StreamAPI按如下方式进行操作:

    List<Expense> result = 
        expenses.stream()
                .filter(e -> e.getDate().getMonthValue() ==  10 && e.getDate().getYear() ==  2021)
                .collect(Collectors.toList());
    

    或者

    List<Expense> result = 
        expenses.stream()
                .filter(e -> {
                    LocalDate date = e.getDate();
                    return date.getMonthValue()  ==  10 && date.getYear() ==  2021;
                })
                .collect(Collectors.toList());
    

    我建议你用第二种方法来避免Expense#getDate在每个步骤中被调用两次