Java8基于一个属性比较两个列表

Java8基于一个属性比较两个列表,java,filter,java-8,java-stream,list-comprehension,Java,Filter,Java 8,Java Stream,List Comprehension,我有两个产品对象列表 我想比较这两个列表以确定是否有产品\u价格\u上次更新\u时间\u同一产品的这两个列表之间的戳记不同 我可以在Java7中做到这一点,每个循环放2个 但我想实现的是Java8(带有流和过滤器) 下面是我在Java7中的示例 List<Product> list1; List<Product> list2; for(Product p1 : list1) { for(Product p2 : list2) { if(!p1.g

我有两个产品对象列表 我想比较这两个列表以确定是否有产品\u价格\u上次更新\u时间\u同一产品的这两个列表之间的戳记不同

我可以在Java7中做到这一点,每个循环放2个 但我想实现的是Java8(带有流和过滤器)

下面是我在Java7中的示例

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());
        }
    }
}
列表列表1;
清单2;
对于(产品p1:list1){
对于(产品p2:list2){
如果(!p1.getProduct\u price\u last\u Update\u time\u stamp().)等于(p2.getProduct\u price\u last\u Update\u time\u stamp()){
System.out.print(“此产品价格已更新:+p1.getProductName());
}
}
}
还有人能帮我理解Java 7和Java 8在性能上的差异吗-

    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和Java 8之间没有实际差异。我之所以说“实际差异”,是因为如果可能的话,找出精确的差异涉及到很多因素


但是,在您的代码示例中,即使找到匹配项,您也没有打破循环,这是非常低效的。

向我们展示您迄今为止所做的尝试?没有提供代码,没有关于如何更改代码的答案…不要谈论诗歌,向我们展示代码。至少分享您使用java 7所做的工作,您可以在java 8中“为每个循环放置2个”也