我正在研究Function,并且我已经尝试过
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无法转换为字符串”
答案 0 :(得分:2)
forEach()
接受一个使用者,该使用者将一个功能应用于每个元素。它不返回任何内容,因此您不能在System.out.println()
调用中使用它。如果您想返回来自forEach()
的内容,则有可能需要时stream()
,然后致电map()
。
但是,为了更接近第一个示例,您可能希望改为调用列表中的forEach()
,然后在该位置的每个元素上打印出函数的结果:
Function<Person, String> byName = Person::getName;
list.forEach(e -> System.out.println(byName.apply(e.getName())));
答案 1 :(得分:0)
功能包具有这两个功能接口
根据文档->
如果什么都不做,但会返回一些东西,请使用供应商。
如果需要处理,但不返回任何内容,请使用Consumer。
下面的代码片段解决了我的问题->
Consumer<List<Person>> allNames = (a) -> a.forEach(e -> System.out.print(e.getName()+" "));
allNames.accept(list);