比较对象列表中的给定值-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());