我正在研究功能,我已經(jīng)嘗試過了Function<Person,String> byName = Person::getName;System.out.println( byName.apply(list.get(1)) );這有效并在索引 1 處打印了該人的姓名;但現(xiàn)在我想創(chuàng)建Function<List<Person>,String>以遍歷列表中的所有人Function<List<Person>,String> allNames = a -> a.forEach(e-> e.getName());System.out.println(allNames.apply(list));它拋出一個錯誤,因?yàn)椤皏oid cannot be converted to String”
2 回答

qq_笑_17
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個贊
forEach()
接受一個消費(fèi)者,該消費(fèi)者將一個函數(shù)應(yīng)用于每個元素。它不返回任何東西,所以你不能在調(diào)用中使用它System.out.println()
。如果你覺得你想從 a返回一些東西,如果有必要,forEach()
你很可能想要,然后調(diào)用。stream()
map()
但是,更接近您的第一個示例,您可能想要調(diào)用forEach()
您的列表,然后在每個元素上打印出該函數(shù)的結(jié)果:
Function<Person, String> byName = Person::getName; list.forEach(e -> System.out.println(byName.apply(e.getName())));

富國滬深
TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個贊
功能包有這兩個功能接口
供應(yīng)商
消費(fèi)者
根據(jù)文檔->
如果 Supplier 什么都不帶,但會返回一些東西,請使用 Supplier。
如果 Consumer 需要一些東西,但不返回任何東西,請使用 Consumer。
以下片段解決了我的問題->
Consumer<List<Person>> allNames = (a) -> a.forEach(e -> System.out.print(e.getName()+" ")); allNames.accept(list);
添加回答
舉報
0/150
提交
取消