List <object>中的Java过滤器映射

时间:2017-01-03 08:53:18

标签: java list dictionary java-stream

我在这里遇到了一些问题但似乎无法找到解决方案。

我有一个包含String of Object,Object2的对象列表。 对象2本身包含一个String of String,String

如何对此进行排序以最终得到一个带有Map字符串的List,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

我整个上午都在反对这一事。如果有人能帮助我,我会非常感激。提前谢谢!

使用flatmap我最终会得到所需的地图列表,但会丢失超类,如下所示:

         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;

}

&#34; PARAMS&#34;是需要过滤的东西。

1 个答案:

答案 0 :(得分:2)

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

      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());