Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Java ÏÂÒ»´ú: ¿Ë·þͬÒå´Ê¸ÉÈÅ
 
×÷ÕßNeal Ford £¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-11-25
  2366  次浏览      27
 

ÈÏʶ²»Í¬ Java.net ÓïÑÔÖÐÀàËÆµÄº¯Êý½á¹¹

ÉÏÒ»ÆÚ Java ÏÂÒ»´ú ÎÄÕ£¨¡°º¯Êýʽ±àÂë·ç¸ñ¡±£©¶Ô±ÈºÍ±È½ÏÁË Scala¡¢Groovy ºÍ Clojure Öеĺ¯Êýʽ±àÂë·ç¸ñ¡£ÔÚ±¾ÎÄÖУ¬ÏµÁÐ×÷¼Ò Neal Ford ½«»á¸üÉîÈëµØÆÊÎö Java ÏÂÒ»´úÓïÑÔÖеĹýÂË¡¢Ó³ÉäºÍËõ¼õ£¨reduce£©¹¦ÄÜ¡£ÎÄÖÐÌṩµÄһϵÁмò¶ÌµÄ±àÂëʾÀý¿É°ïÖúÄúÕûÀíÕâ 3 ÖÖÓïÑÔÔÚÃüÃûÕâÐ©ÖØÒªµÄº¯Êý½á¹¹µÄ·½Ê½ÉϵıȽÏÈÝÒ×»ìÏýµÄÇø±ð¡£

º¯Êýʽ±à³ÌÓïÑÔ°üº¬¶à¸öϵÁеij£¼ûº¯Êý¡£µ«¿ª·¢ÈËÔ±ÓÐʱºÜÄÑÔÚÓïÑÔÖ®¼ä½øÐÐÇл»£¬ÒòΪÊìϤµÄº¯Êý¾ßÓв»ÊìϤµÄÃû³Æ¡£º¯ÊýʽÓïÑÔÇãÏòÓÚ»ùÓÚº¯Êý·¶ÀýÀ´ÃüÃûÕâЩ³£¼ûº¯Êý¡£´Ó½Å±¾±³¾°ÑÜÉú¶øÀ´µÄÓïÑÔÇãÏòÓÚʹÓøü¾ßÃèÊöÐÔµÄÃû³Æ£¨ÓÐʱÊǶà¸öÃû³Æ£¬°üº¬¶à¸öÖ¸Ïòͬһ¸öº¯ÊýµÄ±ðÃû£©¡£

ÔÚ±¾ÆÚÎÄÕÂÖУ¬ÎÒ½«¼ÌÐøÌ½ÌÖ 3 ÖÖÖØÒªº¯Êý£¨¹ýÂË¡¢Ó³ÉäºÍËõ¼õ£©µÄʵÓÃÐÔ£¬Õ¹Ê¾À´×ÔÿÖÖ Java ÏÂÒ»´úÓïÑÔµÄʵÏÖϸ½Ú¡£ÎÄÖеÄÌÖÂÛºÍʾÀýÖ¼ÔÚ¼õÇá 3 ÖÖÓïÑÔ¶ÔÀàËÆº¯Êý½á¹¹Ê¹ÓõIJ»Ò»ÖÂÃû³ÆÊ±¿ÉÄÜÒýÆðµÄ»ìÏý¡£

¹ýÂË

ÔÚ¹ýÂË º¯ÊýÖУ¬Äú¿ÉÖ¸¶¨Ò»¸ö²¼¶ûÖµÌõ¼þ£¨Í¨³£ÎªÒ»¸ö¸ß½×º¯ÊýµÄÐÎʽ£©£¬½«ËüÓ¦Óõ½Ò»¸ö¼¯ºÏ¡£¸Ãº¯Êý·µ»Ø¼¯ºÏµÄ×Ó¼¯£¬ÆäÖеÄÔªËØÓë¸ÃÌõ¼þÆ¥Åä¡£¹ýÂËÓë²éÕÒ º¯Êý½ôÃÜÏà¹Ø£¬ºóÕß·µ»Ø¼¯ºÏÖеÚÒ»¸öÆ¥ÅäµÄÔªËØ¡£

Scala

Scala ÓµÓжà¸ö¹ýÂ˺¯Êý±äÌå¡£×î¼òµ¥µÄÇéÐλùÓÚ´«µÝµÄÌõ¼þÀ´¹ýÂËij¸öÁÐ±í¡£ÔÚµÚÒ»¸öʾÀýÖУ¬ÎÒ´´½¨Ò»¸öÊý×ÖÁÐ±í¡£È»ºóʹÓÃÁË filter() º¯Êý£¬²¢´«µÝÁËÒ»¸ö´úÂë¿é£¬Ö¸¶¨ÁËËùÓÐÔªËØ¶¼¿ÉÒÔ±» 3 Õû³ýµÄÌõ¼þ£º

val numbers = List.range(1, 11)
numbers filter (x => x % 3 == 0)
// List(3, 6, 9)

ÎÒ¿ÉÒÀ¿¿ÒþʽµÄ²ÎÊýÀ´´´½¨¸Ã´úÂë¿ìµÄ¸ü¼Ó¼ò½àµÄ°æ±¾£º

numbers filter (_ % 3 == 0)
// List(3, 6, 9)

µÚ¶þ¸ö°æ±¾²»ÄÇôÈß³¤£¬ÒòΪÔÚ Scala ÖУ¬Äú¿ÉÒÔ½«²ÎÊýÌæ»»ÎªÏ»®Ïß¡£Á½¸ö°æ±¾¶¼¿ÉÒԵõ½ÏàͬµÄ½á¹û¡£

¹ýÂ˲Ù×÷µÄÐí¶àʾÀý¶¼Ê¹ÓÃÁËÊý×Ö£¬µ« filter() ÊÊÓÃÓÚÈκμ¯ºÏ¡£´ËʾÀý½« filter() Ó¦Óõ½Ò»¸öµ¥´ÊÁбíÀ´È·¶¨ 3 ×Öĸµ¥´Ê£º

val words = List("the", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog")
words filter (_.length == 3)
// List(the, fox, the, dog)

Scala ÖеÄÁíÒ»¸ö¹ýÂ˺¯Êý±äÌåÊÇ partition() º¯Êý£¬Ëü½«Ò»¸ö¼¯ºÏ²ð·ÖΪ¶à¸ö²¿·Ö¡£ÕâÖÖ²ð·Ö»ùÓÚÄú´«µÝµÄ¸ß½×º¯ÊýÀ´È·¶¨·ÖÀëÌõ¼þ¡£ÔÚÕâÀpartition() º¯Êý½«·µ»ØÁ½¸öÁÐ±í£¬ËüÃÇÒÀ¾ÝÄÄЩÁбí³ÉÔ±¿É±» 3 Õû³ýÀ´½øÐвð·Ö£º

numbers partition (_ % 3 == 0)
// (List(3, 6, 9),List(1, 2, 4, 5, 7, 8, 10))

filter() º¯Êý·µ»ØÒ»¸öÆ¥ÅäÔªËØ¼¯ºÏ£¬¶ø find() ½ö·µ»ØµÚÒ»¸öÆ¥ÅäÔªËØ£º

numbers find (_ % 3 == 0)
// Some(3)

µ«ÊÇ£¬find() µÄ·µ»ØÖµ²»ÊÇÆ¥ÅäµÄÖµ±¾Éí£¬¶øÊÇÒ»¸ö°ü×°ÔÚ Option ÀàÖеÄÖµ¡£Option ÓÐÁ½¸ö¿ÉÄܵÄÖµ£ºSome »ò None¡£ÏñÆäËûһЩº¯ÊýʽÓïÑÔÒ»Ñù£¬Scala ʹÓà Option ×÷ΪһÖÖÔ¼¶¨À´±ÜÃâÔÚȱÉÙij¸öֵʱ·µ»Ø null¡£Some() ʵÀý°üװʵ¼ÊµÄ·µ»ØÖµ£¬ÔÚ numbers find (_ % 3 == 0) µÄÇé¿öÏ£¬¸ÃֵΪ 3¡£Èç¹ûÎÒ³¢ÊÔ²éÕÒij¸ö²»´æÔÚµÄÖµ£¬ÄÇô·µ»ØÖµ½«Îª None£º

numbers find (_ < 0)
// None

Scala »¹°üº¬¶à¸öº¯Êý£¬ËüÃÇ»ùÓÚÒ»¸öÅж¨º¯ÊýÀ´´¦ÀíÒ»¸ö¼¯ºÏ²¢·µ»ØÖµ»ò¶ªÆúËüÃÇ¡£takeWhile() º¯Êý·µ»Ø¼¯ºÏÖÐÂú×ãÅж¨º¯ÊýµÄ×î´óµÄÖµ¼¯£º

List(1, 2, 3, -4, 5, 6, 7, 8, 9, 10) takeWhile (_ > 0)
// List(1, 2, 3)

dropWhile() º¯ÊýÌø¹ýÂú×ãÅж¨Ìõ¼þµÄ×î´óÔªËØÊýÁ¿£º

words dropWhile (_ startsWith "t")
// List(quick, brown, fox, jumped, over, the, lazy, dog)

Groovy

Groovy ²»ÊÇÒ»¸öº¯ÊýʽÓïÑÔ£¬µ«Ëü°üº¬Ðí¶àº¯Êý·¶Àý£¬Ò»Ð©·¶ÀýµÄÃû³ÆÔ´×Խű¾ÓïÑÔ¡£ÀýÈ磬ÔÚº¯ÊýʽÓïÑÔÖУ¬¸Ãº¯ÊýÔÚ´«Í³Éϱ»³ÆÎª filter() µÄº¯Êý£¬¾ÍÊÇ Groovy ÖÐµÄ findAll() ·½·¨£º

(1..10).findAll {it % 3 == 0}
// [3, 6, 9]

Ïñ Scala µÄ¹ýÂ˺¯ÊýÒ»Ñù£¬Groovy ¿É´¦ÀíËùÓÐÀàÐÍ£¬°üÀ¨×Ö·û´®£º

def words = ["the", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]
words.findAll {it.length() == 3}
// [The, fox, the, dog]

Groovy »¹ÓÐÒ»¸öÀàËÆ partition() µÄº¯Êý£¬³ÆÎª split()£º

(1..10).split {it % 3}
// [[1, 2, 4, 5, 7, 8, 10], [3, 6, 9]]

split() ·½·¨µÄ·µ»ØÖµÊÇÒ»¸öǶÌ×Êý×飬¾ÍÏñ Scala ÖÐ´Ó partition() ·µ»ØµÄǶÌ×ÁÐ±í¡£

Groovy µÄ find() ·½·¨·µ»Ø¼¯ºÏÖеÚÒ»¸öÆ¥ÅäµÄÔªËØ£º

(1..10).find {it % 3 == 0}
// 3

²»Í¬ÓÚ Scala£¬Groovy ×ñÑ­ Java Ô¼¶¨£¬ÔÚ find() δÄÜÕÒµ½ÔªËØÊ±·µ»Ø null£º

(1..10).find {it < 0}
// null

Groovy »¹ÓµÓÐ takeWhile() ºÍ dropWhile() ·½·¨£¬ËüÃǾßÓÐÓë Scala µÄ°æ±¾ÀàËÆµÄÓïÒ壺

[1, 2, 3, -4, 5, 6, 7, 8, 9, 10].takeWhile {it > 0}
// [1, 2, 3]

Óë Scala ʾÀýÖÐÒ»Ñù£¬dropWhile ±»ÓÃ×÷Ò»¸öרÃŵĹýÂËÆ÷£ºËü¶ªÆúÓëÅж¨Ìõ¼þÆ¥ÅäµÄ×î´óǰ׺£¬½ö¹ýÂËÁбíµÄµÚÒ»²¿·Ö£º

def moreWords = ["the", "two", "ton"] + words
moreWords.dropWhile {it.startsWith("t")}
// [quick, brown, fox, jumped, over, the, lazy, dog]

Clojure

Clojure ÓµÓÐÁîÈËÕ𾪵ļ¯ºÏ²Ù×÷Àý³ÌÊýÁ¿¡£ÓÉÓÚ Clojure µÄ¶¯Ì¬ÀàÐÍ£¬ÆäÖÐÐí¶àÀý³Ì¶¼ÊÇͨÓõġ£Ðí¶à¿ª·¢ÈËÔ±ÇãÏòÓÚʹÓà Clojure£¬ÒòΪËüµÄ¼¯ºÏ¿â·Ç³£·á¸»ºÍÁé»î¡£Clojure ʹÓô«Í³µÄº¯Êýʽ±à³ÌÃû³Æ£¬Èç (filter ) º¯ÊýËùʾ£º

(def numbers (range 1 11))
(filter (fn [x] (= 0 (rem x 3))) numbers)
; (3 6 9)

ÏñÆäËûÓïÑÔÒ»Ñù£¬Clojure Ϊ¼òµ¥µÄÄäÃûº¯ÊýÌṩÁ˼ò½àµÄÓï·¨£º

(filter #(zero? (rem % 3)) numbers)
; (3 6 9)

¶øÇÒÓëÆäËûÓïÑÔÖÐÒ»Ñù£¬Clojure µÄº¯ÊýÊÊÓÃÓÚÈκÎÊÊÓõÄÀàÐÍ£¬±ÈÈç×Ö·û´®£º

(def words ["the" "quick" "brown" "fox" "jumped" "over" "the" "lazy" "dog"])
(filter #(= 3 (count %)) words)
; (the fox the dog)

Clojure µÄ (filter ) ·µ»ØÀàÐÍΪ Seq£¬Ëüͨ¹ýÔ²À¨ºÅÀ´ÃèÊö¡£Seq ÊÇ Clojure ÖеÄ˳Ðò¼¯ºÏµÄºËÐijéÏó¡£

<!DOCTYPE HTML>

Ó³Éä

ËùÓÐ Java ÏÂÒ»´úÓïÑÔÖг£¼ûµÄµÚ¶þ¸öÖ÷ÒªµÄº¯Êý±äÐÎÊÇÓ³Éä¡£Ó³É亯Êý½ÓÊÜÒ»¸ö¸ß½×º¯ÊýºÍÒ»¸ö¼¯ºÏ£¬È»ºóÏòÿ¸öÔªËØÓ¦Óô«µÝµÄº¯Êý²¢·µ»ØÒ»¸ö¼¯ºÏ¡£·µ»ØµÄ¼¯ºÏ£¨²»Í¬ÓÚ¹ýÂË£©µÄ´óСÓëԭʼ¼¯ºÏÏàͬ£¬µ«¸üÐÂÁËÖµ¡£

Scala

Scala µÄ map() º¯Êý½ÓÊÜÒ»¸ö´úÂë¿é²¢·µ»Ø×ª»»µÄ¼¯ºÏ£º

List(1, 2, 3, 4, 5) map (_ + 1)
// List(2, 3, 4, 5, 6)

map() º¯ÊýÊÊÓÃÓÚËùÓÐÊÊÓõÄÀàÐÍ£¬µ«Ëü²»Ò»¶¨·µ»Ø¼¯ºÏÔªËØµÄÒÑת»»¼¯ºÏ¡£ÔÚ´ËʾÀýÖУ¬ÎÒÔÚÒ»¸ö×Ö·û´®Öзµ»ØËùÓÐÔªËØµÄ´óСÁÐ±í£º

words map (_.length)
// List(3, 5, 5, 3, 6, 4, 3, 4, 3)

ÔÚº¯Êýʽ±à³ÌÓïÑÔÖг£³£»á²úÉúǶÌ×ÁÐ±í£¬ÒÔÖÁÓÚǶÌ×Áбí¶Ô½â³ýǶÌ×£¨Í¨³£³ÆÎª±âƽ»¯£©µÄ¿âÖ§³ÖºÜ³£¼û¡£ÒÔÏÂÊÇ±âÆ½»¯Ò»¸öǶÌ×ÁбíµÄʾÀý£º

List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9)) flatMap (_.toList)
// List(1, 2, 3, 4, 5, 6, 7, 8, 9)

»ñµÃµÄ List Öнö°üº¬ÔªËØ£¬É¾³ýÁ˶îÍâµÄ»ù´¡¼Ü¹¹¡£flatMap º¯ÊýÒ²ÊÊÓÃÓÚ¿ÉÄÜδÒÔ´«Í³·½Ê½Ç¶Ì×µÄÊý¾Ý½á¹¹¡£ÀýÈ磬Äú¿É½«Ò»¸ö×Ö·û´®ÊÓΪһ¸öǶÌ××Ö·ûϵÁУº

words flatMap (_.toList)
// List(t, h, e, q, u, i, c, k, b, r, o, w, n, f, o, x, ...

Groovy

Groovy »¹°üº¬¶à¸ö³ÆÎª collect() µÄÓ³Éä±äÌ塣ĬÈϵıäÌå½ÓÊÜÒ»¸ö´úÂë¿é£¬ÒԱ㽫¸Ã±äÌåÓ¦Óõ½¼¯ºÏµÄÿ¸öÔªËØ£º

(1..5).collect {it += 1}
// [2, 3, 4, 5, 6]

ÏñÆäËûÓïÑÔÒ»Ñù£¬Groovy ÔÊÐí¶Ô¼òµ¥µÄÄäÃû¸ß½×º¯ÊýʹÓüòд£»it ±£Áô×ÖÓÃÓÚÌæ´úµ¥¶ÀµÄ²ÎÊý¡£

collect() ·½·¨ÊÊÓÃÓÚÄú¿ÉÏòÆäÌṩºÏÀíµÄÅж¨Ìõ¼þµÄÈκμ¯ºÏ£¬±ÈÈçÒ»¸ö×Ö·û´®ÁÐ±í£º

def words = ["the", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]
words.collect {it.length()}
// [3, 5, 5, 3, 6, 4, 3, 4, 3]

Groovy »¹ÓÐÒ»¸öÀàËÆÓÚ flatMap() µÄÕÛµþÄÚ²¿½á¹¹µÄ·½·¨£¬³ÆÎª flatten()£º

[[1, 2, 3], [4, 5, 6], [7, 8, 9]].flatten()
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

flatten() ·½·¨Ò²ÊÊÓÃÓÚ²»Ì«Ã÷ÏԵļ¯ºÏ£¬±ÈÈç×Ö·û´®£º

(words.collect {it.toList()}).flatten()
// [t, h, e, q, u, i, c, k, b, r, o, w, n, f, o, x, j, ...

Clojure

Clojure °üº¬Ò»¸ö (map ) º¯Êý£¬Ëü½ÓÊÜÒ»¸ö¸ß½×º¯Êý£¨ÆäÖаüº¬ÔËËã·û£©ºÍÒ»¸ö¼¯ºÏ£º

(map inc numbers)
; (2 3 4 5 6 7 8 9 10 11)

(map ) µÄµÚÒ»¸ö²ÎÊý¿ÉÒÔÊÇÈκνÓÊܵ¥¸ö²ÎÊýµÄº¯Êý£ºÃüÃûº¯Êý¡¢ÄäÃûº¯Êý»òÒÑ´æÔڵĺ¯Êý£¬±ÈÈçµÝÔöÆä²ÎÊýµÄ inc¡£´ËʾÀýÖÐÑÝʾÁ˸üµäÐ͵ÄÄäÃûÓï·¨£¬ËüÉú³ÉÒ»¸ö×Ö·û´®Öеĵ¥´Ê³¤¶ÈµÄ¼¯ºÏ£º

(map #(count %) words)
; (3 5 5 3 6 4 3 4 3)

Clojure µÄ (flatten ) º¯ÊýÀàËÆÓÚ Groovy µÄ£º

(flatten [[1 2 3] [4 5 6] [7 8 9]])
; (1 2 3 4 5 6 7 8 9)

ÕÛµþ/Ëõ¼õ

ÔÚ 3 ÖÖ Java ÏÂÒ»´úÓïÑÔÖУ¬µÚÈý¸ö³£¼ûº¯ÊýÔÚÃû³ÆÉÏÓµÓÐ×î¶à±äÌåºÍÐí¶àϸ΢µÄÇø±ð¡£foldLeft ºÍ reduce ÊÇÒ»¸öÃûΪ catamorphism µÄÁбí²Ù×÷¸ÅÄîÉϵÄÌØ¶¨±äÌ壬¸Ã¸ÅÄîÊÇÁбíÕÛµþµÄÒ»ÖÖ·º»¯¡£ÔÚ´ËʾÀýÖУ¬¡°ÕÛµþ×ó²à¡± ±íʾ£º

ʹÓÃÒ»¸ö¶þ½øÖƺ¯Êý»òÔËËã·û½«ÁбíµÄµÚÒ»¸öÔªËØÓëµÚ¶þ¸öÔªËØÏà½áºÏ£¬´´½¨Ò»¸öеĵÚÒ»¸öÔªËØ¡£

µ¥Ò»ÔªËØ¡£

Çë×¢Ò⣬ÕâÊÇÄúÔÚ¶ÔÒ»×éÊý×ÖÇóºÍʱËù×öµÄ²Ù×÷£º´Ó 0 ¿ªÊ¼£¬¼ÓµÚÒ»¸öÔªËØ£¬½«½á¹ûÓëµÚ¶þ¸öÔªËØÏà¼Ó£¬Ò»Ö±Ö´Ðд˲Ù×÷£¬Ö±µ½ÁбíÔªËØ±»ÓÃÍêΪֹ¡£

Scala

Scala ÓµÓÐ×î·á¸»µÄÕÛµþÔËË㼯ºÏ£¬ÕâÊÇÒòΪËüÔÚÒ»¶¨³Ì¶ÈÉϼò»¯Á˶¯Ì¬ÀàÐ굀 Groovy ºÍ Clojure ÖÐûÓеĶàÖÖÀàÐͳ¡¾°¡£Ëõ¼õº¯Êý³£ÓÃÓÚÖ´ÐÐÇóºÍ£º

List.range(1, 10) reduceLeft((a, b) => a + b)
// 45

Ìṩ¸ø reduce() µÄº¯Êýͨ³£ÊÇÒ»¸ö½ÓÊÜÁ½¸ö²ÎÊý£¬²¢·µ»Øµ¥¸ö½á¹ûµÄº¯Êý»òÔËËã·û£¬ÒÔ±ã¿ÉÒÔʹÓÃÒ»¸öÁÐ±í¡£Äú¿ÉÒÔʹÓà Scala µÄÓï·¨ÌÇÀ´Ëõ¶Ìº¯Êý¶¨Ò壺

List.range(1, 10).reduceLeft(0)(_ + _)
// 45

reduceLeft() º¯Êý¼ÙÉèµÚÒ»¸öÔªËØÊÇÔËËãµÄ×ó²à¡£¶ÔÓÚÏà¼ÓµÈÔËËã·û£¬²Ù×÷ÊýµÄλÖÃÎ޹ؽôÒª£¬µ«·ÅÖÃ˳Ðò¶ÔÏà³ýµÈÔËËãÖÁ¹ØÖØÒª¡£Èç¹ûÏ£Íû·´×ªÔËËã·ûÓ¦ÓõÄ˳Ðò£¬¿ÉÒÔʹÓà reduceRight()£º

List.range(1, 10) reduceRight(_ - _)
// 5

Á˽âºÎʱ¿ÉʹÓÃËõ¼õµÈ¸ß¼¶³éÏóÊÇÕÆÎÕº¯Êý±à³ÌµÄÒ»¸ö¹Ø¼ü¡£´ËʾÀýʹÓà reduceLeft() À´È·¶¨¼¯ºÏÖÐ×î³£µÄµ¥´Ê£º

words.reduceLeft((a, b) => if (a.length > b.length) a else b)
// jumped

Ëõ¼õºÍÕÛµþÔËËãÓµÓÐÖØµþµÄ¹¦ÄÜ£¬ËüÃǾßÓÐϸ΢µÄ²î±ð£¬µ«Õâ²»ÊôÓÚ±¾ÎĵÄÌÖÂÛ·¶Î§¡£µ«ÊÇ£¬Í¨³£¿ÉÒÔ¿´µ½ËüÃǵÄÒ»¸öÃ÷ÏÔÇø±ð¡£ÔÚ Scala ÖУ¬Ç©Ãû reduceLeft[B >:A](op:(B, A) => B):B ±íÃ÷ΩһÏëÒªµÄ²ÎÊý¾ÍÊÇ×éºÏÔªËØµÄº¯Êý¡£³õʼֵӦ¸ÃÊǼ¯ºÏÖеĵÚÒ»¸öÖµ¡£Ïà¶Ô¶øÑÔ£¬Ç©Ãû foldLeft[B](z:B)(op:(B, A) => B):B ±íʾ½á¹ûµÄÒ»¸ö³õʼÖÖ×ÓÖµ£¬ËùÒÔÄú¿ÉÒÔ·µ»ØÓëÁбíÔªËØÀàÐͲ»Í¬µÄÀàÐÍ¡£

ÒÔÏÂÊÇÒ»¸öʹÓà foldLeft ¶Ô¼¯ºÏÇóºÍµÄʾÀý£º

List.range(1, 10).foldLeft(0)(_ + _)
// 45

Scala Ö§³ÖÔËËã·ûÖØµþ£¬ËùÒÔÁ½¸ö³£¼ûµÄÕÛµþ²Ù×÷ foldLeft ºÍ foldRight ·Ö±ðÓµÓÐÏàÓ¦µÄÔËËã·û£º/: ºÍ :\¡£Òò´Ë£¬Äú¿ÉÒÔʹÓà foldLeft ´´½¨ sum µÄ¼ò½à°æ±¾£º

(0 /: List.range(1, 10)) (_ + _)
// 45

ÀàËÆµØ£¬ÒªÕÒµ½Ò»¸öÁбíÖÐÿ¸öÔªËØµÄ¼¶ÁªÇø±ð£¨ÇóºÍÔËËãµÄ·´Ïò²Ù×÷£¬ÎÞ¿É·ñÈÏÕâÖÖÐèÇóºÜÉÙ¼û£©£¬Äú¿ÉÒÔʹÓà foldRight() º¯Êý»ò :\ ÔËËã·û£º

(List.range(1, 10) :\ 0) (_ - _)
// 5

Groovy

Groovy ͨ¹ýʹÓÃÖØµþÀ´Ö§³ÖÓë Scala µÄ reduce() ºÍ foldLeft() Ñ¡ÏîÏàͬµÄ¹¦ÄÜ£¬´Ó¶ø½øÈëËõ¼õÀà±ð¡£¸Ãº¯ÊýµÄÒ»¸ö°æ±¾½ÓÊÜÒ»¸ö³õʼֵ¡£´ËʾÀýʹÓà inject() ·½·¨Éú³ÉÒ»¸ö¼¯ºÏµÄ×ܺͣº

(1..10).inject {a, b -> a + b}
// 55

Ìæ´úÐÎʽ½ÓÊÜÒ»¸ö³õʼֵ£º

(1..10).inject(0, {a, b -> a + b})
// 55

Groovy ÓµÓÐÒ»¸ö±È Scala »ò Clojure СµÃ¶àµÄº¯Êý¿â ¡ª Groovy ÊÇÒ»ÖÖ²»Ç¿µ÷º¯Êýʽ±à³ÌµÄ¶à·¶Àý±à³Ì£¬¿´µ½ÕâÖÖÇé¿öºÁ²»Ææ¹Ö¡£

Clojure

Clojure Ö÷ÒªÊÇÒ»ÖÖº¯Êýʽ±à³ÌÓïÑÔ£¬ËùÒÔËüÖ§³Ö (reduce )¡£(reduce ) º¯Êý½ÓÊÜÒ»¸ö¿ÉÑ¡µÄ³õʼֵ£¬ÒÔ±ãͬʱº­¸Ç Scala Ëù´¦ÀíµÄ reduce() ºÍ foldLeft() ÇéÐΡ£(reduce ) º¯ÊýûÓиøÓû§´øÀ´ÈκξªÏ²¡£Ëü½ÓÊÜÒ»¸öÐèÒªÁ½¸ö²ÎÊýµÄº¯ÊýºÍÒ»¸ö¼¯ºÏ£º

(reduce + (range 1 11))
; 55

Clojure ½«¶ÔÀàËÆ reduce µÄ¹¦Äܵĸ߼¶Ö§³Ö°üº¬ÔÚÒ»¸öÃûΪ reducers µÄ¿âÖУ¬ºóÃæµÄÒ»ÆÚÎÄÕ½«»á½éÉÜÕâ¸ö¿â¡£

½áÊøÓï

ѧϰ²»Í¬·¶Àý£¨±ÈÈ纯Êýʽ±à³Ì£©µÄ²¿·ÖÌôÕ½ÔÚÓÚѧϰÐÂÊõÓï¡£ÔÚ²»Í¬ÉçÇøÊ¹Óò»Í¬µÄ´Ê»ãʱ£¬ÕâÒ»¹ý³Ì»á±äµÃ¸ü¼Ó¸´ÔÓ¡£µ«Ò»µ©ÕÆÎÕÁËÏàËÆÐÔ£¬Äú¾Í»á¿´µ½£¬ËùÓÐ 3 ÖÖ Java ÏÂÒ»´úÓïÑÔ¶¼ÒÔÁîÈ˾ªÆæµÄ·½Ê½ÔÚÓï·¨ÉÏÌṩÁËÖØµþµÄ¹¦ÄÜ¡£

ÔÚÏÂÒ»ÆÚÖУ¬ÎÒ½«Ì½ÌÖ Java ÏÂÒ»´úÓïÑÔÖеÄÄڴ滯£¬ÌÖÂÛº¯ÊýÌØÐÔÈçºÎ½áºÏʹÓÃÀ´ÊµÏÖ¼ò½àÓÐÁ¦¡£

   
2366 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ