Map<Integer, EquipmentInfo> equipmentMap = equipments.stream().collect(Collectors.toMap(EquipmentInfo::getId, Function.identity()));
请问为什么对于这里用传入的Function<? super T, ? extends K> keyMapper,可以引用实体类的get方法,如EquipmentInfo::getId呢?
这里的function不是应该要有一个输入和一个输出吗,实体类的get方法只有输出而已,没有输入呀?
lambda表达式本身就是一个匿名的函数
EquipmentInfo::getId整个是作为参数传递给Collectors.toMap,
核心的工作是toMap做的。
toMap会执行getId,把getId返回的值当key,equipment实例当value生成map.
getId这个方法不需要参数。
谁告诉你要写(e)->e.getId()的啊。。。
这里的e不是参数,而是循环里的引用,类似于for(EquipmentInfo e : equipments)里的e
你改成e->e.getId()也可以,不需要加()变成(e)->e.getId()
Function fun = Student::getId;我刚刚在idea上发现了这个,常见实体类的get方法中,我们看到的是无参,有返回值,但是在Lamada的使用上看,神奇的出现了实际上应该是传入了一个Student对象,返回值为String. 具体为什么这样我 不太清楚,但这个确实是有一个Student的对象存在在那里,所以没有报错