简体   繁体   English

Java Filter方法如何使用动态参数进行过滤?

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

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());
    }

}

在此处输入图像描述

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);
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM