我正在研究功能,我已经尝试过了Function<Person,String> byName = Person::getName;System.out.println( byName.apply(list.get(1)) );这有效并在索引 1 处打印了该人的姓名;但现在我想创建Function<List<Person>,String>以遍历列表中的所有人Function<List<Person>,String> allNames = a -> a.forEach(e-> e.getName());System.out.println(allNames.apply(list));它抛出一个错误,因为“void cannot be converted to String”
2 回答
qq_笑_17
TA贡献1818条经验 获得超7个赞
forEach()
接受一个消费者,该消费者将一个函数应用于每个元素。它不返回任何东西,所以你不能在调用中使用它System.out.println()
。如果你觉得你想从 a返回一些东西,如果有必要,forEach()
你很可能想要,然后调用。stream()
map()
但是,更接近您的第一个示例,您可能想要调用forEach()
您的列表,然后在每个元素上打印出该函数的结果:
Function<Person, String> byName = Person::getName; list.forEach(e -> System.out.println(byName.apply(e.getName())));
富国沪深
TA贡献1790条经验 获得超9个赞
功能包有这两个功能接口
供应商
消费者
根据文档->
如果 Supplier 什么都不带,但会返回一些东西,请使用 Supplier。
如果 Consumer 需要一些东西,但不返回任何东西,请使用 Consumer。
以下片段解决了我的问题->
Consumer<List<Person>> allNames = (a) -> a.forEach(e -> System.out.print(e.getName()+" ")); allNames.accept(list);
添加回答
举报
0/150
提交
取消