List<Object> 内的 Java 过滤器映射

标签 java list dictionary java-stream

我在这里遇到了一些问题,似乎找不到解决方案。

我有一个对象列表,其中包含字符串 Object2 的映射。 对象2本身包含一个String的Map,String

如何对其进行排序以最终得到一个包含 Map String, Object2 的列表,仅包含 Map String, String 不为空的条目?

这是我到目前为止得到的:

 list.stream()
            .filter(i -> i.getServices().entrySet().stream()
                    .filter(c -> c.getValue() != null))
            .collect(Collectors.toList());

但是这会导致以下错误:

Type mismatch: cannot convert from Stream<Map.Entry<String,Object>> to boolean

整个早上我都在努力解决这个问题。如果有人能在这里帮助我,我将非常感激。提前致谢!

使用平面 map ,我最终得到了所需的 map 列表,但丢失了父类(super class),如下所示:

         List<Entry<String, Service>> a = list.stream()
         .flatMap(cus -> cus.getServices().entrySet().stream())
         .filter(service -> service.getValue() != null)
         .collect(Collectors.toList());

编辑:澄清: 第一个对象:

public class Subscription {
    ...
    public Map <String, Service> services;
}

第二个对象:

public class Service {

...
private Map<String, String> params;

}

“params”是需要过滤的内容。

最佳答案

正如错误所示,您的 lambda 正在返回一个流,即当您需要返回 boolean 时调用 filter 的结果。 我不确定类型,但我认为这或多或少是您想要的:

      List<Subscription> foo = list.stream()
          .map(s -> s.services.entrySet().stream()
                        .filter(x -> x.getValue() != null)
                        .collect(Collectors.toMap(
                            Map.Entry::getKey, Map.Entry::getValue)))
          .map(m -> new Subscription(m))
          .collect(Collectors.toList());

关于List<Object> 内的 Java 过滤器映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41439664/

相关文章:

java - REST 和 JAVA JPA

java - 模拟退火 N Queens 概率公式

list - 创建用于测试不同类型函数的测试框架

performance - Python 3.3 在大循环期间变慢

java - 使用 map 检查是否包含数组。但不起作用

java - 在 beans.xml 中获取错误

java - 对象中的无限递归/静态创建/为什么此代码会抛出 NullPointerException?

r - R 中 DNAStringset 的子集列表

python - 如何将列表的每个元素分配给单独的变量?

arrays - Bash - 如何将列表分配给数组成员