如何按月和年过滤对象数组 - 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());
我是 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());