我有2个产品对象列表 而且,我想比较这两个列表,以确定同一产品的两个列表之间是否有任何 product_price_last_updated_time_stamp 不同。
我可以在Java 7中做到这一点,在每个循环中放置2个 但是我想实现的是Java 8(带有流和过滤器)
这是我在 Java 7
中的示例List<Product> list1;
List<Product> list2;
for(Product p1 : list1) {
for(Product p2 : list2) {
if(!p1.getProduct_price_last_updated_time_stamp().equals(p2.getProduct_price_last_updated_time_stamp()) {
System.out.print("This product price has been updated: "+p1.getProductName());
}
}
}
也有人可以帮助我了解Java 7和Java 8在性能方面的差异
答案 0 :(得分:0)
尝试一下:-
list1.stream()
.flatMap(x -> list2
.stream()
.filter(y -> x.getId() == y.getId())
.filter(y -> !x.getLastUpdated().isEqual(y.getLastUpdated()))
.limit(1))
.forEach(product -> System.out.println("Product price has been updated: " + product.getName()));
我假设您的priceLastUpdated
属性是LocalDateTime
类型。如果您使用的是其他类型,则可以调用相关的equals()
方法而不是我上面使用的isEqual()
。
您提到了“同一产品的 ”,但是您的代码不会检查该产品是否相同。我使用id
来检查它是否与产品x.getId() == y.getId()
相同。您可以使用任何喜欢的字段。
关于性能,如果编码正确,Java 7和8之间没有实际区别。我之所以说“实用上的差异”,是因为要找出精确的差异(如果可能)涉及很多因素。
但是在代码示例中,即使找到匹配项,您也不会中断循环,这是非常低效的。