在我的理解中,当需要对列表中的每个元素应用函数时,我们使用fold函数,对吧?
如果只是迭代列表,foreach就够了吗?
答案 0 :(得分:6)
在我的理解中,当需要对列表中的每个元素应用函数时,我们使用fold函数,对吧?
不。如果要获得的结果是全部列表中的元素,则可以使用折叠。也就是说,您将列表fold
转换为一个结果
要在列表的每个元素上应用相同的功能,主要用于打印到屏幕等副作用,请使用foreach
,因此使用名称。
答案 1 :(得分:5)
<强> fold
强>
如果希望将集合聚合为单个值,请使用fold
。在这里我们说,从零开始并将每个连续元素添加到前一个元素,然后在集合耗尽后返回结果。
scala> List(1, 2, 3).foldLeft(0){ (a, b) => a + b }
res10: Int = 6
请注意,fold
是为并行计算而设计的,但foldLeft
和foldRight
在应用哪些类型方面更为强大。
<强> map
强>
如果要将函数应用于集合中的每个元素并使用结果返回另一个集合,请使用map
。
scala> List(1, 2, 3).map(x => x + x)
res12: List[Int] = List(2, 4, 6)
<强> foreach
强>
如果您不想返回任何内容但需要一些副作用,请使用foreach
,例如。将每个值保存到数据库。
List(1, 2, 3).foreach(x => saveToDB(x))
答案 2 :(得分:3)
如果您想减少列表,则使用折叠
List(1,2,3,4).foreach(println)
Foreach用于迭代列表,例如打印所有元素
18:10:57,894 ERROR [io.undertow.request] (default task-18) UT005023: Exception handling request java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.SerializationConfig.withDefaultPrettyPrinter(Lcom/fasterxml/jackson/core/PrettyPrinter;)Lcom/fasterxml/jackson/databind/SerializationConfig;
at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:86)
at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:67)
at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:49)
.......:46
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:72)
at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:282)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:261)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:80)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:172)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:199)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:774)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)