我在这里遇到了一些问题但似乎无法找到解决方案。
我有一个包含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;是需要过滤的东西。
答案 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());