Soy nuevo en Java y tengo una pregunta. Tengo esta matriz de objetos:

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

Eso contiene esto:

enter image description here

Me gustaría saber cómo puedo filtrar esta matriz por mes y año.

Un primer ejemplo sería filtrar la matriz por mes 10 y año 2021.

¿Alguna sugerencia?

0
NewProgrammer 4 oct. 2021 a las 20:04

3 respuestas

La mejor respuesta

Puede utilizar la API Stream para hacerlo de la siguiente manera:

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

Alternativamente,

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

Te recomiendo que lo hagas de la segunda forma para evitar que llamen a Expense#getDate dos veces en cada paso.

1
Arvind Kumar Avinash 4 oct. 2021 a las 17:14

// Podrías usar foreach.

int monthNumb = 10;
for(expense ex : expenses)
if(ex.date == monthNumb) { /*behavior*/}
1
Gabriel Paz 4 oct. 2021 a las 17:16

Alternativa a la respuesta correcta de @Avinds, sugeriría usar java.time.YearMonth para que sea obvio lo que se filtra:

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

List<Expense> result = expenses.stream()
                               .filter(ex -> YearMonth.from(ex.getDate()).equals(ymFilter))
                               .collect(Collectors.toList());
1
Eritrean 4 oct. 2021 a las 17:30