为什么在执行 flatmap() 调用时会出现编译错误?
Why do I get compilation error when doing flatmap() call?
假设我有以下对象:
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>>
。
提前致谢。
flatMap
方法是 map
的特例,用于展平嵌套的 Stream
、Optional
和其他单子工具。
在您的情况下,您没有提供 returns 一个 Stream
的函数,因此它不能用作 flatMap
参数。
您的函数将在标准 map()
下正常工作,但:
resultList.stream()
.map(entity -> entity.getIntToDate()); // no compilation errors
您可以通过将结果包装在 Stream
实例中来使您的示例工作,但这并没有给您带来比上面的示例任何优势 - 仅出于教育目的这样做是有意义的:
resultList.stream()
.flatMap(entity -> Stream.of(entity.getIntToDate())); // no compilation error
是"daily"不是"dayly"。
假设我有以下对象:
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>>
。
提前致谢。
flatMap
方法是 map
的特例,用于展平嵌套的 Stream
、Optional
和其他单子工具。
在您的情况下,您没有提供 returns 一个 Stream
的函数,因此它不能用作 flatMap
参数。
您的函数将在标准 map()
下正常工作,但:
resultList.stream()
.map(entity -> entity.getIntToDate()); // no compilation errors
您可以通过将结果包装在 Stream
实例中来使您的示例工作,但这并没有给您带来比上面的示例任何优势 - 仅出于教育目的这样做是有意义的:
resultList.stream()
.flatMap(entity -> Stream.of(entity.getIntToDate())); // no compilation error
是"daily"不是"dayly"。