为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥6287543 2023-04-13 17:10:08
我正在研究功能,我已经尝试过了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())));


查看完整回答
反对 回复 2023-04-13
?
富国沪深

TA贡献1790条经验 获得超9个赞

功能包有这两个功能接口

  1. 供应商

  2. 消费者

根据文档->

如果 Supplier 什么都不带,但会返回一些东西,请使用 Supplier。

如果 Consumer 需要一些东西,但不返回任何东西,请使用 Consumer。

以下片段解决了我的问题->

    Consumer<List<Person>> allNames = (a) -> a.forEach(e -> System.out.print(e.getName()+" "));
    allNames.accept(list);


查看完整回答
反对 回复 2023-04-13
  • 2 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信