假设我有以下对象:
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;
}
现在,假设我有一个每日数据列表: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>>
.
提前谢谢。
flatMap
方法是map
的特例,用于展平嵌套Stream
、Optional
和其他一元工具。
在您的情况下,您没有提供返回Stream
的函数,因此它不能用作flatMap
参数。
不过,您的函数在标准map()
下可以正常工作:
resultList.stream()
.map(entity -> entity.getIntToDate()); // no compilation errors
您可以通过将结果包装在Stream
实例中来使您的示例正常工作,但这并没有给您带来比上面示例更多的优势 - 仅出于教育目的这样做是有意义的:
resultList.stream()
.flatMap(entity -> Stream.of(entity.getIntToDate())); // no compilation error
它是"每日"而不是"每天"。