我在这里遇到了一些问题,似乎找不到解决方案。
我有一个对象列表,其中包含字符串 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/