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

How to filter an array of objects by month and year - Java

我是 Java 的新人,我有一个问题。我有这个对象数组:

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

包含这个:

我想知道如何按月和年过滤这个数组。

第一个示例是按第 10 个月和 2021 年过滤数组。

有什么建议吗?

您可以使用 Stream API 进行如下操作:

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在每个步骤中被调用两次。

您可以使用 for-each 循环,如下例所示。

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

替代@Avinds 正确答案,我建议使用 java.time.YearMonth 来明确什么是 filterd:

YearMonth ymFilter = YearMonth.of(2021,10);

List<Expense> result = expenses.stream()
                               .filter(ex -> YearMonth.from(ex.getDate()).equals(ymFilter))
                               .collect(Collectors.toList());