如何使用一组字符串过滤映射值?

问题描述 投票:0回答:1

我不得不使用字符串Map来过滤Set值,我可以使它起作用(合作​​伙伴建议使用anyMatch()代替我在这里所做的事情,但我不知道如何做)而且我想知道您如何看待该算法,以及是否有可能对其进行改进(可能使用另一个Stream函数甚至是contains()方法),所以我不确定是否可以避免直接通过Set(用于每个循环)。

Set<String> productIds = (some code to collect the strings) ...; 
serviceResponse.setProducts(serviceResponse.getProducts().entrySet().stream()
          .filter(product -> {
             for (String productId: productIds) {
                if (product.getKey().startsWith(productId)) {
                    return true;
                }
             }
             return false;
           }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)));

重要注意事项:我正在使用Set过滤Map中的乘积,Set中的字符串与Map的键几乎具有相同的格式,因此可以安全地使用startsWith()进行比较。

java dictionary lambda stream set
1个回答
1
投票

您可以通过在集合中流式传输并使用anyMatch来避免内部for循环:

serviceResponse.setProducts(serviceResponse.getProducts()
    .entrySet().stream()
    .filter(product -> productIds.stream().anyMatch(product.getKey()::startsWith))
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)));
© www.soinside.com 2019 - 2024. All rights reserved.