当前位置: 首页 > 面试题库 >

Java 8 Lambda-两个列表的交集

欧阳意蕴
2023-03-14
问题内容

我试图intersection根据某些条件并执行一些步骤来找到两个列表。在学习阶段找不到方法:)

Double totalAmount = 0.00d;
Double discount = 0.00d;


List<OrderLineEntry> orderLineEntryList = orderEntry.getOrderReleases().stream()
    .flatMap(orderReleaseEntry -> orderReleaseEntry.getOrderLines().stream())
    .filter(orderLineEntry -> orderLineEntry.getStatus().equals("PP") || orderLineEntry.getStatus().equals("PD"))
    .collect(Collectors.toList());

for (OrderLineEntry orderLineEntry : orderLineEntryList) {
    for (SplitLineEntry splitLineEntry : splitReleaseEntry.getLineEntries()) {
        if (splitLineEntry.getOrderLineId().equals(orderLineEntry.getId()) && splitLineEntry.getStatusCode() != "PX") {
            totalAmount += orderLineEntry.getFinalAmount();
            couponDiscount += orderLineEntry.getCouponDiscount() == null ? 0.00d : orderLineEntry.getCouponDiscount();
        }
    }
}

如您所见,逻辑很简单

根据某个过滤器从订单中获取所有项目,list并与另一个过滤器相交list并做一些事情。


问题答案:

最简单的方法是这样的:

List<T> intersect = list1.stream()
                         .filter(list2::contains)
                         .collect(Collectors.toList());


 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 从列表列表中删除重复项 (12个答案) 4年前关闭。 这是我的两个清单。 我的输出应为以下内容; 如何获得此输出? 先感谢您 问题答案: 您将必须将列表转换为元组列表,然后使用交集。请注意,下面的解决方案可能具有不同顺序的元素,并且由于我使用的是set,因此显然不会存在重复项。 您也可以将交叉点保存在变量中并获取最终列表,如果需要排序,则需要重复: 和交

  • 问题内容: 我知道如何得到两个平面列表的交集: 但是当我必须找到嵌套列表的交集时,我的问题就开始了: 最后,我希望收到: 你们能帮我这个忙吗? 问题答案: 如果你想: 然后这是你的Python 2解决方案: 在Python 3 返回一个迭代,而不是,所以你需要用filter与呼叫list(): 说明: 过滤器部分接受每个子列表的项目,并检查它是否在源列表c1中。对c2中的每个子列表执行列表推导。

  • 问题内容: 我有两个平面列表,其中一个包含重复值。例如, 我需要在array1中也找到array2中的值,并保留array1中的重复项。预期的结果将是 我想避免循环,因为实际数组将包含数百万个值。我尝试了各种布景和相交组合,但无法保留重复项。 任何帮助将不胜感激! 问题答案: 您是什么意思不想使用循环?您将不得不以一种或另一种方式对其进行迭代。只需单独放入每个项目,然后检查是否随身携带: 此外,根

  • 问题内容: a = [1,1,1,2,3,4,4] >>> b = [1,1,2,3,3,3,4] 请注意,这不是一个相同的问题: 两个列表的Python交集保持重复 因为即使列表a中有三个1,列表b中也只有两个,所以结果应该只有两个。 问题答案: 您可以使用此方法,当您使用交叉路口时,它将为每个元素提供在任一列表中找到的最低计数。 输出 :

  • 我知道在Python中,如果我有: 我可以做以下操作来找到两者之间的交集: 但这种方法有一个问题:集合不能像列表那样维持秩序。如果我真的有: 我得到: 即使我更喜欢从第一个列表的顺序,即。: 是否有其他交叉点技术可以将生成的“交叉点集”保持与第一个列表相同的顺序?

  • 我正在尝试开发一个程序,通过将甲板分成两个然后交错来洗牌甲板。 Class Deck代表52张牌的一副牌。有两种方法:Deck(int n)和Card drawCard()。 Deck(int n)是构造函数。该参数告诉牌组应该洗牌多少轮。在每轮洗牌中,整个甲板首先被分成两个子甲板。副甲板然后交错成一整层甲板。 一些注意事项: > 为了简化讨论,我们假设卡片是1,2,…,10。 Card draw