比较对象列表中的给定值-Java8

比较对象列表中的给定值-Java8,java,java-8,stream,Java,Java 8,Stream,我有一张物品清单 class Product{ String productName; int mfgYear; int expYear; } int testYear = 2019; List<Product> productList = getProductList(); 类产品{ 字符串名称; int mfgYear; 国际年; } int testYear=2019年; List productList=getProductList(); 我这里有产

我有一张物品清单

class Product{

  String productName;
  int mfgYear;
  int expYear;
} 


int testYear = 2019;
List<Product> productList = getProductList();
类产品{
字符串名称;
int mfgYear;
国际年;
} 
int testYear=2019年;
List productList=getProductList();
我这里有产品清单

必须迭代列表中的每个产品,并获取给定2019年(测试年)介于mfgYear和expYear之间的
list productName

例如,
mfgYear
列表过程(列表产品列表){
返回productList.stream()
.filter(此::isWithinRange)
.map(产品::getProductName)
.collect(Collectors.toList());
}
布尔值isWithinRange(乘积){

return product.mfgYear您可以编写以下内容:

int givenYear = 2019;

List<String> productNames = 
                  products.stream()
                          .filter(p -> p.mfgYear <= givenYear && givenYear <= p.expYear)
                          .map(Product::name)
                          .collect(Collectors.toList());

// It would be more clean if you can define a boolean function inside your product class

class Product {
// your code as it is
boolean hasValidRangeGiven(int testYear) {
       return mfgDate <= testYear && testYear <= expYear:
}

List<String> productNames = products.stream()
                                    .filter(p -> p.hasValidRange(givenYear))
                                    .map(Product::name)
                                    .collect(Collectors.toList());


int givenYear=2019;
列表产品名称=
products.stream()

.filter(p->p.mfgYear到目前为止您尝试了什么?感谢您的回答..是否有方法从isWithinRange传递testYear变量,因为我的比较年份在每次检查之间都会发生变化。。
List<String> process(List<Product> productList) {
    return productList.stream()
            .filter(this::isWithinRange)
            .map(Product::getProductName)
            .collect(Collectors.toList());
}

boolean isWithinRange(Product product) {
    return product.mfgYear <= 2019 && product.expYear <= 2019;
}

static class Product {

    String productName;
    int mfgYear;
    int expYear;

    public String getProductName() {
        return productName;
    }
}
int givenYear = 2019;

List<String> productNames = 
                  products.stream()
                          .filter(p -> p.mfgYear <= givenYear && givenYear <= p.expYear)
                          .map(Product::name)
                          .collect(Collectors.toList());

// It would be more clean if you can define a boolean function inside your product class

class Product {
// your code as it is
boolean hasValidRangeGiven(int testYear) {
       return mfgDate <= testYear && testYear <= expYear:
}

List<String> productNames = products.stream()
                                    .filter(p -> p.hasValidRange(givenYear))
                                    .map(Product::name)
                                    .collect(Collectors.toList());