假设我有以下对象:
public class DaylyData {
private Date date;
private List<Integer> numersList;
// standard getters/setters
public Map<Integer, Date> getIntToDate() {
Map<Integer, Date> resultMap = new HashMap<>();
for(Integer number : getNumersList()) {
resultMap.put(number, getDate());
}
return resultMap;
}
现在,假设我有一份DaylyData列表:List<DaylyData> resultList
。
以下结果如何:
resultList.stream().flatMap(entity -> entity.getIntToDate());
如果我将结果分配给Stream<Map<Integer, Date>>
,我会收到Type mismatch: cannot convert from Map<Integer,Date> to Stream<? extends Map<Integer,Date>>
。
提前致谢。
答案 0 :(得分:2)
flatMap
方法是map
的特例,用于展平嵌套的Stream
,Optional
和其他monadic工具。
在您的情况下,您没有提供返回Stream
的函数,因此它不能用作flatMap
参数。
您的功能可以使用标准map()
正常工作,但是:
resultList.stream()
.map(entity -> entity.getIntToDate()); // no compilation errors
您可以通过将结果包装在Stream
实例中来使您的示例正常工作,但这并不比上述示例更有优势 - 仅仅出于教育目的这样做才有意义:
resultList.stream()
.flatMap(entity -> Stream.of(entity.getIntToDate())); // no compilation error
这是“每日”而不是“每天”。