首页 > 解决方案 > 将列表中的一个值与另一个列表的子列表中的另一个值进行比较java 8

问题描述

这是用于将一个列表中的一个值与另一个列表进行比较的代码。如果我需要一个值列表,如何重写代码,方法是将第一个列表与具有另一个列表的多个对象的子列表中的另一个值进行比较。

假设这里 hitsList 包含另一个子列表,并且需要将 item 对象中的一个值与 h​​it 对象列表中的另一个值进行比较。

List<Item> itemList3 = Item.parallelStream()
                  .filter(item -> hits.stream()
                    .anyMatch(hit -> 
                   item.getProductRecId().equals(hit.getCrtRecID()) 
                      ))
                    .collect(Collectors.toList());

标签: javacollectionsjava-8java-stream

解决方案


尝试这个:

Set<Hit> ctrRecIDs = hits.stream()
                          .map(Hit::getCrtRecID)
                          .collect(Collectors.toSet());

List<Item> filteredItems = items.stream()
                                .filter(it -> ctrRecIDs.contains(it.getProductRecId())
                                .collect(Collectors.toList());

上述解决方案的时间复杂度是线性的 ( O(n)),而您的初始时间复杂度是平方 ( O(n^2))


推荐阅读