See More

---------------------------- JAVA8ÐÂÌØÐÔ-Stream½Ó¿Ú | ---------------------------- * Stream ½Ó¿Ú(¹ûÈ»ÊÇж«Î÷,Á¬Editplus¶¼Ã»±êºìÌáʾ) * ËüÌṩ´®ÐкͲ¢ÐÐÁ½ÖÖģʽ½øÐлã¾Û²Ù×÷£¬²¢·¢Ä£Ê½Äܹ»³ä·ÖÀûÓöàºË´¦ÀíÆ÷µÄÓÅÊÆ£¬Ê¹Óà fork/join ²¢Ðз½Ê½À´²ð·ÖÈÎÎñºÍ¼ÓËÙ´¦Àí¹ý³Ì¡£ * ͨ³£±àд²¢ÐдúÂëºÜÄѶøÇÒÈÝÒ׳ö´í, µ«Ê¹Óà Stream API ÎÞÐè±àдһÐжàÏ̵߳ĴúÂ룬¾Í¿ÉÒԺܷ½±ãµØÐ´³ö¸ßÐÔÄܵIJ¢·¢³ÌÐò * Stream µÄÁíÍâÒ»´óÌØµãÊÇ£¬Êý¾ÝÔ´±¾Éí¿ÉÒÔÊÇÎÞÏ޵ġ£ * Ëü²¢·ÇÊÇÊý¾Ý½á¹¹,Ò²²»ÊÇÈÝÆ÷.¶øÊÇÒ»¸ö¹ý³Ì * Á÷µÄ²Ù×÷·ÖΪÁ½ÖÖ Intermediate * Ò»¸öÁ÷¿ÉÒÔºóÃæ¸úËæÁã¸ö»ò¶à¸ö intermediate ²Ù×÷¡£ÆäÄ¿µÄÖ÷ÒªÊÇ´ò¿ªÁ÷£¬×ö³öijÖ̶ֳȵÄÊý¾ÝÓ³Éä/¹ýÂË£¬È»ºó·µ»ØÒ»¸öеÄÁ÷£¬½»¸øÏÂÒ»¸ö²Ù×÷ʹÓá£ÕâÀà²Ù×÷¶¼ÊǶèÐÔ»¯µÄ£¨lazy£© * ¾ÍÊÇ˵£¬½ö½öµ÷Óõ½ÕâÀà·½·¨£¬²¢Ã»ÓÐÕæÕý¿ªÊ¼Á÷µÄ±éÀú¡£ * ·½·¨ map (mapToInt, flatMap µÈ)¡¢ filter distinct sorted peek limit skip parallel sequential unordered Terminal * Ò»¸öÁ÷Ö»ÄÜÓÐÒ»¸ö terminal ²Ù×÷£¬µ±Õâ¸ö²Ù×÷Ö´Ðкó£¬Á÷¾Í±»Ê¹Ó᰹⡱ÁË£¬ÎÞ·¨ÔÙ±»²Ù×÷¡£ËùÒÔÕâ±Ø¶¨ÊÇÁ÷µÄ×îºóÒ»¸ö²Ù×÷¡£ * Terminal ²Ù×÷µÄÖ´ÐУ¬²Å»áÕæÕý¿ªÊ¼Á÷µÄ±éÀú£¬²¢ÇÒ»áÉú³ÉÒ»¸ö½á¹û£¬»òÕßÒ»¸ö side effect¡£ * ·½·¨ forEach forEachOrdered toArray reduce collect min max count anyMatch allMatch noneMatch findFirst findAny iterator * Èç¹ûÒ»¸öÁ÷µÄ²Ù×÷,ûÓÐ Terminal ,Ôò¸ÃÁ÷ÖеÄÈκΠIntermediate ²Ù×÷¶¼²»»áÖ´ÐÐ ---------------------------- JAVA8ÐÂÌØÐÔ-StreamµÄ»ñµÃ | ---------------------------- 1,Collection ×ÓÀà´´½¨ * ×ÓÀàÖ±½Óµ÷Óà stream();·½·¨(³£ÓÃ) * ×ÓÀàÖ±½Óµ÷Óà parallelStream();·½·¨,¶¨ÒåÔÚ Collection ½Ó¿ÚÖÐµÄ default ·½·¨ 2,Êý×é´´½¨ * Arrays.stream(T[] array); 4,Stream ¾²Ì¬·½·¨´´½¨ * Stream integerStream = Stream.of(1,2,3,4,5,6); 5,ÎļþIO´´½¨ * Stream stream = Files.lines(String path,Charset charser); * ¸ÃÁ÷»á×Ô¶¯¹Ø±Õ # ´´½¨ÎÞÏÞÁ÷µÄ·½·¨ * Stream str = Stream.generate(Supplier supplier); * ¸ÃÁ÷ÿ´ÎÖ´ÐÐ foreach ¶¼»áµ÷Óà supplier µÄ get ·½·¨,Ò²¾ÍÊÇ˵¸Ã¹¹½¨·½·¨¿ÉÒÔ´´½¨ÎÞÏÞ´óµÄÁ÷ * Stream.iterate(1, item -> item + 1).limit(10).forEach(System.out::println); * ÏÈ»ñȡһ¸öÎÞÏÞ³¤¶ÈµÄÕýÕûÊý¼¯ºÏµÄStream£¬È»ºóÈ¡³öǰ10¸ö´òÓ¡¡£Ç§Íò¼ÇסʹÓÃlimit·½·¨£¬²»È»»áÎÞÏÞ´òÓ¡ÏÂÈ¥¡£ ---------------------------- JAVA8ÐÂÌØÐÔ-Stream½Ó¿Ú·½·¨ | ---------------------------- parallel(); * ÆôÓò¢ÐÐÁ÷ filter (Predicate super T> predicate); * ÓÃÓÚ¹ýÂË,ɸѡ map (Function super T, ? extends R> mapper); * ¶ÔÓÚStreamÖаüº¬µÄÔªËØÊ¹Óøø¶¨µÄת»»º¯Êý½øÐÐת»»²Ù×÷,°ÑËùÓеķµ»ØÖµ,×é³ÉеÄÁ÷ * '´«Èë¸öUser¶ÔÏó(UserÁ÷),ÌáÈ¡ÀïÃæµÄËùÓÐnameÊôÐÔ,ת»»ÎªÒ»¸öStreamµÄÁ÷' * ÐÂÉú³ÉµÄStreamÖ»°üº¬×ª»»Éú³ÉµÄÔªËØ¡£ flatMap (Function super T, ? extends Stream extends R>> mapper); * ´«ÈëµÄ¾ÍÊÇÁ÷, * ºÍmapÀàËÆ£¬²»Í¬µÄÊÇ´«ÈëµÄÔªËØ,¾ÍÊÇÒ»¸öÁ÷ * ˵°×ÁË,¾ÍÊÇ´«ÈëµÄÿһ¸öÁ÷,È»ºóºÏ²¢ÆðÀ´³ÉΪһ¸öÁ÷,·µ»Ø * ×¢Òâ²ÎÊý¶ÔÏó Function µÄ·µ»ØÖµÊÇ Stream mapToInt mapToLong mapToDouble * ÕâÈý¸ö¶¼ÊÇÒ»ÑùµÄ,¼ÆËãºóµÄеÄÁ÷ÊÇÖ¸¶¨ÖµÀàÐÍ(IntStream,LongStream,DoubleStream)¿ÉÒÔÃâ³ý×Ô¶¯×°Ïä/²ðÏäµÄ¶îÍâÏûºÄ£» sorted (); * Ò²ÊÇÅÅÐò,ÐèÒªÔªËØ×ÔÉíʵÏÖ Comparable ½Ó¿Ú sorted (Comparator super T> comparator); * ÅÅÐò,×Ô¶¨Òå Comparator À´Íê³ÉÅÅÐò peek (Consumer super T> action); * Éú³ÉÒ»¸ö°üº¬Ô­StreamµÄËùÓÐÔªËØµÄÐÂStream£¬Í¬Ê±»áÌṩһ¸öÏû·Ñº¯Êý£¨ConsumerʵÀý£©£¬ÐÂStreamÿ¸öÔªËØ±»Ïû·ÑµÄʱºò¶¼»áÖ´Ðиø¶¨µÄÏû·Ñº¯Êý£» * ¸ú map µÄÇø±ð¾ÍÊÇ,mapÊÇ´´½¨Ðµķµ»Ø,Õâ¸ö²»·µ»ØÖ±½ÓÔÚÔ­À´µÄÉÏ¸Ä limit (long maxSize); * ·µ»ØÁ÷Ç°ÃæµÄ¼¸¸öÔªËØ,Èç¹ûÔ­StreamÖаüº¬µÄÔªËØ¸öÊýСÓÚN£¬ÄǾͻñÈ¡ÆäËùÓеÄÔªËØ * Ò²¿ÉÒÔÓÃÔÚ Set ¼¯ºÏµÄÁ÷ÉÏ,ÄÇô½ØÈ¡µ½µÄÁ÷,ÊÇÎÞÐòµÄ skip (long n); * ¶ªÆú(Ìø¹ý)Á÷Ç°ÃæµÄ¼¸¸öÔªËØ,Èç¹ûÔ­StreamÖаüº¬µÄÔªËØ¸öÊýСÓÚN£¬ÄÇô·µ»Ø¿ÕStream£» forEach (Consumer super T> action); * ±éÀú,ÔÚ¶àºËÇé¿öÏÂÒ²Ðí»áʧȥ˳Ðò * Èç¹ûÄãÐèÒª¶àºË±éÀú,ÄÇôÐèÒªµ÷Óà arr.parallelStream().forEach(System.out::println); 'Collection' ½Ó¿ÚµÄĬÈÏ·½·¨ forEachOrdered (Consumer super T> action); * ͬÉÏ,µ«ÊÇ,'ÔÚ¶àºËÇé¿öÏÂ˳Ðò²»»áÓÐÓ°Ïì' reduce (T identity, BinaryOperator accumulator); * µÚÒ»¸ö²ÎÊýÊdzõʼֵ,ºóÃæ Lambda´«µÝÁ©Öµ.±íʾҪ½øÐÐɶ²Ù×÷,µÃµ½É¶½á¹û * int sum = numbers.stream().reduce(0,(a,b) -> {a + b}); //ÇóÒ»×鼯ºÏÖÐËùÓÐÊý×ÖµÄºÍ * Èç¹ûÊÇ parallelStream(); ²¢ÐÐÁ÷µ÷ÓÃÖ´Ðеϰ,´«µÝ¸ø Lambda ±í´ïʽ accumulator µÄÁ©±äÁ¿²»Äܸü¸Ä״̬,¶øÇÒ²Ù×÷±ØÐëÂú×ã½áºÏÂɲſÉÒÔ°´ÈÎÒâ˳ÐòÖ´ÐÐ reduce (); * ÉÏÃæµÄÖØÔØ,ÎÞ³õʼֵ * ·µ»Ø Optional,Òòû³õʼֵ.ÅÂÁ÷ÊÇ¿ÕµÄ * Optional max = numbers.stream().reduce(Integer::max); //·µ»ØÊý×ÖÁ÷ÖеÄ×î´óÖµ toArray (); * ·µ»Ø Object[] Êý×é findFirst (); * ÕâÊÇÒ»¸ö termimal ¼æ short-circuiting ²Ù×÷£¬Ëü×ÜÊÇ·µ»Ø Stream µÄµÚÒ»¸öÔªËØ£¬»òÕ߿ա£ findAny * ͬÉÏ,Ò²ÊÇ·µ»ØµÚÒ»¸öÔªËØ.µ«ÊÇÕâ¸öÅ£±ÆÖ®´¦ÔÚÓÚ,'´¦Àí²¢ÐÐ'. * Èç¹ûÄã²»½éÒâ·µ»ØµÄÔªËØÊÇÄĸö,¿ÉÒÔʹÓÃÕâ¸ö distinct (); * È¥³ýÖØ¸´,»áÒÀÀµhashCodeºÍequals count (); * ·µ»ØÁ÷ÖÐÔªËØµÄ¸öÊý min(Comparator com); * ¸ù¾Ý±È½ÏÆ÷,»ñÈ¡×îµÄÔªËØ max(Comparator com); * ¸ù¾Ý±È½ÏÆ÷,»ñÈ¡×î´óµÄÔªËØ collect(Collectors.toList()); * °Ñ½á¹û,ת»»ÎªÒ»¸ö¼¯ºÏ * ½ÓÊÕÒ»¸ö Collectors ½Ó¿ÚµÄʵÏÖ,ÓÃÓÚ°ÑÔªËØÖеÄÄÚÈÝ,½øÐÐÒ»¸ö»ã×Ü //Æ¥ÅäϵÁеÄAPI allMatch * ¼ì²éÊÇ·ñÆ¥ÅäËùÓÐÔªËØ,·µ»Ø boolean anyMatch * ¼ì²éÊÇ·ñÖÁÉÙÆ¥ÅäÒ»¸öÔªËØ boolean noneMath * ¼ì²éÊÇ·ñδƥÅäÖÐÈκÎÔªËØ boolean findFirst * ·µ»ØµÚÒ»¸öÔªËØ * ·µ»ØÊǵÄÀàÐÍÊÇ Optional findAny * ·µ»Øµ±Ç°Á÷ÖеÄÈÎÒâÔªËØ * ·µ»ØÊǵÄÀàÐÍÊÇ Optional ---------------------------- JAVA8ÐÂÌØÐÔ-»ù±¾Êý¾ÝÀàÐ굀 | ---------------------------- * ¶ÔÓÚ»ù±¾ÊýÖµÐÍ£¬Ä¿Ç°ÓÐÈýÖÖ¶ÔÓ¦µÄ°ü×°ÀàÐÍ Stream£º IntStream LongStream DoubleStream * µ±È»ÎÒÃÇÒ²¿ÉÒÔÓà Stream¡¢Stream >¡¢Stream£¬µ«ÊDzðÏäºÍ×°Ïä»áºÜºÄʱ£¬ËùÒÔÌØ±ðΪÕâÈýÖÖ»ù±¾ÊýÖµÐÍÌṩÁ˶ÔÓ¦µÄ Stream¡£ * ¶îÍâ·½·¨ min(); //»ñÈ¡Á÷ÖеÄ×îСֵ max(); //»ñÈ¡Á÷ÖеÄ×î´óÖµ sum(); //ºÍÖµ average(); //ƽ¾ùÖµ boxed(); //ת»»»á Stream Á÷ ---------------------------- JAVA8ÐÂÌØÐÔ-ÎÞÏÞÁ÷ | ---------------------------- # µü´ú Stream.iterate(0, n -> n+2); * 0 ±íʾ³õʼֵ,È»ºó²»¶ÏµÄ +2 * Ò»°ãÀ´ËµËµ,ÐèÒªÒÀ´ÎÉú³ÉһϵÁÐÖµµÄʱºò¾ÍÓ¦¸ÃÓÃÕâ¸ö # Éú³É Stream str = Stream.generate(Supplier supplier); * ¸ÃÁ÷ÿ´ÎÖ´ÐÐ foreach ¶¼»áµ÷Óà supplier µÄ get ·½·¨,Ò²¾ÍÊÇ˵¸Ã¹¹½¨·½·¨¿ÉÒÔ´´½¨ÎÞÏÞ´óµÄÁ÷ ---------------------------- JAVA8ÐÂÌØÐÔ-Á÷µÄ״̬ | ---------------------------- # ÎÞ״̬ # ÓÐ״̬ -> Óнç # ÓÐ״̬ -> ÎÞ½ç ---------------------------- JAVA8ÐÂÌØÐÔ-²¢ÐÐÁ÷ | ---------------------------- # ¶àÏ̵߳ÄÁ÷ * ͨ¹ý parallelStream(); ¿ÉÒÔ»ñÈ¡¶àÏ̵߳ÄÁ÷ list.parallelStream().forEach(System.out::println); //¶àÏ̴߳òÓ¡,˳Ðò»áÓÐÓ°Ïì * Á÷Ö±½Óµ÷Óà parallel(); ·½·¨ Stream stream = Stream.of("1","2","4").parallel(); # ¹Ø±Õ²¢ÐÐÁ÷ sequential(); ---------------------------- JAVA8ÐÂÌØÐÔ-×ܽá | ---------------------------- # Á÷µÄ´´½¨,ÎÞÏÞÁ÷µÄ´´½¨ * list.stream(); //Collection ·½·¨ * Stream.of(1,2,3,4,5,6); * Stream.generate(Supplier supplier); * Arrays.stream(T[] array); # Á÷µÄ²Ù×÷·½Ê½,Á½ÖÖ * ¹ý³Ì * ½á¹û # ¶àÏ̵߳ÄÁ÷ * ͨ¹ý parallelStream(); ¿ÉÒÔ»ñÈ¡¶àÏ̵߳ÄÁ÷ list.parallelStream().forEach(System.out::println); //¶àÏ̴߳òÓ¡,˳Ðò»áÓÐÓ°Ïì * Á÷Ö±½Óµ÷Óà parallel(); ·½·¨ Stream stream = Stream.of("1","2","4").parallel(); # ÎÞÏÞÁ÷ ---------------------------- JAVA8ÐÂÌØÐÔ-collector | ---------------------------- # ÊÇÒ»¸ö½Ó¿Ú,ÊÕ¼¯Æ÷,ÔÚÁ÷ÖÐʹÓÃAPI:collect(Collector collecto); # Ô¤¶¨ÒåµÄÊÕ¼¯Æ÷ Collectors.toList() * °Ñ½á¹ûת»»ÎªÒ»¸ö¼¯ºÏ Collectors.toSet(); * °Ñ½á¹ûת»»ÎªÒ»¸öSet Collectors.toCollection(Supplier collectionFactory); * ת»»Îª×Ô¶¨ÒåµÄ Collection ½Ó¿ÚʵÏÖ * ¾ÍÊÇ¿ÉÒÔʹÓÃ×Ô¼º´´½¨ÈÝÆ÷ * collect(Collectors.toCollection(HashSet::new)); Collectors.counting(); * ·µ»Ø lang,°Ñ½á¹ûÊÕ¼¯ÎªÒ»¸ö×ÜÊý Collectors.averagingInt(); Collectors.averagingLong(); Collectors.averagingDouble(); * ÒÔÉÏÈý,¶¼ÊDz»Í¬Êý¾ÝÀàÐÍµÄÆ½¾ùÖµ Collectors.summarizingInt(); Collectors.summarizingLong(); Collectors.summarizingDouble(); * ÒÔÉÏÈý,¶¼ÊDz»Í¬Êý¾ÝÀàÐÍµÄºÍ * ·µ»Ø Collectors.maxBy(Comparator super T> comparator); * ¸ù¾Ý±È½ÏÆ÷,»ñÈ¡×î´óÖµ Collectors.minBy(Comparator super T> comparator); * ¸ù¾Ý±È½ÏÆ÷,»ñÈ¡×îСֵ Collectors.groupingBy(Function super T, ? extends K> classifier); * ·Ö×é,·µ»Ø Map,LambdaµÄ·µ»ØÖµ,»á×÷ΪMapµÄkey * Demo Map> = users.stream().collect(Collectors.groupingBy(item -> { return user.getAge() > 20 ? "ÖÐÄê" : "ÇàÄê"; })); Collectors.groupingBy(Function function,Collector collector); * ÏȰ´ÕÕ Function µÄ·µ»ØÖµ½øÐзÖ×é * ÔÙ°Ñ·Ö×éµÄ½á¹û,½øÐÐ collector ÊÕ¼¯²Ù×÷ * Demo //ÏȰ´ÐÔ±ð·Ö×é,ÔÙ°´ÄêÁä·Ö×é Map>> = users.stream().collect( Collectors.groupingBy(User:getSex, Collectors.groupingBy((user) - > { return user.getAge() > 20 ? "ÖÐÄê" : "ÇàÄê"; })); Collectors.joining(); * Á¬½Ó²Ù×÷,×Ö·û´®Á¬½Ó.ûÓÐÈκÎÖмä·ûºÅ * Demo String namesss = users.stream() .map(User:getName); .collect(Collectors.joining()); Collectors.joining(String a,String b,String c); * ͬÉÏ,²»¹ý»áÔÚÁ¬½ÓµÄ¿ªÍ·¼ÓÉÏ b,½áβ¼ÓÉÏ c,ÿ¸öÁ¬½ÓµãÖ®¼ä¼ÓÉÏ a