How to use the Java Filter method to filter with a dynamic parameter?

130 Views Asked by At

What is the correct way to filter elements of a list with declarative programming? My idea is to create a new list with more specific elements. For example having a new list only dates from a date specified by the user.

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

public class App {

    public static void main(String[] args) {
        Date d1 = new Date("2020/02/15");
        Date d2 = new Date("2020/03/15");
        Date d3 = new Date("2020/04/15");
        Date d4 = new Date("2020/05/15");
        Date d5 = new Date("2020/06/15");
        Date d6 = new Date("2020/07/15");

        List<Date> dates1 = new ArrayList<>();

        dates1.add(d1);
        dates1.add(d2);
        dates1.add(d3);
        dates1.add(d4);
        dates1.add(d5);
        dates1.add(d6);

        Date dateFilter = new Date("2020/05/14");

        List<Date> dates2 = dates1.stream()
                .filter((date -> date.compareTo(dateFilter)))
                .collect(Collectors.toList());
    }

}

enter image description here

1

There are 1 best solutions below

0
On

It is a bit hard to understand your question, From what I understood below is the solution you can try:

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class App {

public static void main(String[] args) {
    //using new date libraries
    LocalDate d1 = LocalDate.parse("2020-02-15");
    LocalDate d2 = LocalDate.parse("2020-03-15");
    LocalDate d3 = LocalDate.parse("2020-04-15");
    LocalDate d4 = LocalDate.parse("2020-05-15");
    LocalDate d5 = LocalDate.parse("2020-06-15");
    LocalDate d6 = LocalDate.parse("2020-07-15");

    List<LocalDate> dateList = new ArrayList<>();

    dateList.add(d1);
    dateList.add(d2);
    dateList.add(d3);
    dateList.add(d4);
    dateList.add(d5);
    dateList.add(d6);

    LocalDate dateToFilter = LocalDate.parse("2020-05-15");
    //You were using compareTo which will return int value filter expects Boolean
    List<LocalDate> filteredDates = dateList.stream()
            .filter((LocalDate -> LocalDate.isEqual(dateToFilter)))
            .collect(Collectors.toList());
    filteredDates.forEach(System.out::println);
  }
}