猿问

为什么这个 Function<List<Person>,String> 不起作用?

我正在研究功能,我已经尝试过了


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”


慕哥6287543
浏览 110回答 2
2回答

qq_笑_17

forEach()接受一个消费者,该消费者将一个函数应用于每个元素。它不返回任何东西,所以你不能在调用中使用它System.out.println()。如果你觉得你想从 a返回一些东西,如果有必要,forEach()你很可能想要,然后调用。stream()map()但是,更接近您的第一个示例,您可能想要调用forEach()您的列表,然后在每个元素上打印出该函数的结果:Function<Person,&nbsp;String>&nbsp;byName&nbsp;=&nbsp;Person::getName; list.forEach(e&nbsp;->&nbsp;System.out.println(byName.apply(e.getName())));

富国沪深

功能包有这两个功能接口供应商消费者根据文档->如果 Supplier 什么都不带,但会返回一些东西,请使用 Supplier。如果 Consumer 需要一些东西,但不返回任何东西,请使用 Consumer。以下片段解决了我的问题->&nbsp;&nbsp;&nbsp;&nbsp;Consumer<List<Person>>&nbsp;allNames&nbsp;=&nbsp;(a)&nbsp;->&nbsp;a.forEach(e&nbsp;->&nbsp;System.out.print(e.getName()+"&nbsp;")); &nbsp;&nbsp;&nbsp;&nbsp;allNames.accept(list);
随时随地看视频慕课网APP

相关分类

Java
我要回答