首页 > 解决方案 > 从 2 个列表中过滤并使用 java8 获取匹配的记录

问题描述

我有两个列表,一个是messagePermissionResponseDTOList,另一个dispatchSMSQList。我想从中取出被屏蔽的号码列表dispatchSMSQList。下面是我的工作代码片段。您能否指导如何将其转换为 Lambda 表达式或其正确性。?与测试数据的工作链接是https://repl.it/repls/FriendlyImmenseClasses

        TreeSet<Long> blockedNumbersSet = new TreeSet<>();
        for (MessagePermissionResponseDTO permission: messagePermissionResponseDTOList) {
            if (permission.isBlocked()) {
                blockedNumbersSet.add(permission.getPhoneNumber());
            }
        }
        List<DispatchSMSQ> blockedNumbers = dispatchSMSQList.stream().filter(t -> blockedNumbersSet.contains(t.getMdn())).collect(Collectors.toList());

        System.out.print("blockedNumbers-->"+ blockedNumbers.size());

标签: javajava-8

解决方案


你可以这样做,

List<DispatchSMSQ> blockedNumbers = messagePermissionResponseDTOList.stream()
    .filter(MessagePermissionResponseDTO::isBlocked)
    .map(MessagePermissionResponseDTO::getPhoneNumber)
    .collect(Collectors.collectingAndThen(Collectors.toSet(), 
        s -> dispatchSMSQList.stream()
            .filter(d -> s.contains(d.getMdn())).collect(Collectors.toList())));

推荐阅读