ÀÖÓãµç¾º

½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

Javaº¯Êýʽ±à³ÌÈëÃŽ̳Ì[javaÅàѵ]

¸üÐÂʱ¼ä:2020Äê03ÔÂ16ÈÕ16ʱ25·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:

1. º¯Êýʽ±à³Ì¼ò½é

Java×÷ÎªÃæÏò¶ÔÏóµÄ±à³ÌÓïÑÔ£¬Èç¹û°´ÕÕ±à³ÌÖÖÀà»®·ÖÊôÓÚÃüÁîʽ±à³Ì(Imperative Programming)¡£³£¼ûµÄ±à³Ì·¶Ê½»¹ÓÐÂß¼­Ê½±à³Ì(Logic Programming)£¬º¯Êýʽ±à³Ì(Functional Programming)¡£

º¯Êýʽ±à³Ì×÷ΪһÖÖ±à³Ì·¶Ê½£¬ÔÚ¿ÆÑ§ÁìÓò£¬ÊÇÒ»ÖÖ±àд¼ÆËã»ú³ÌÐòÊý¾Ý½á¹¹ºÍÔªËØµÄ·½Ê½£¬Ëü°Ñ¼ÆËã¹ý³Ìµ±×öÊÇÊýѧº¯ÊýµÄÇóÖµ£¬¶ø±ÜÃâ¸ü¸Ä״̬ºÍ¿É±äÊý¾Ý¡£

ʲôÊǺ¯Êýʽ±à³Ì?¼òµ¥µÄ»Ø´ð£ºÒ»Çж¼ÊÇÊýѧº¯Êý¡£º¯Êýʽ±à³ÌÓïÑÔÀïÒ²¿ÉÒÔÓжÔÏ󣬵«Í¨³£ÕâЩ¶ÔÏó¶¼ÊǺ㶨²»±äµÄ —— ҪôÊǺ¯Êý²ÎÊý£¬ÒªÊ²Ã´ÊǺ¯Êý·µ»ØÖµ¡£º¯Êýʽ±à³ÌÓïÑÔÀïûÓÐ for/next Ñ­»·£¬ÒòΪÕâЩÂß¼­Òâζ×ÅÓÐ״̬µÄ¸Ä±ä¡£ÏàÌæ´úµÄÊÇ£¬ÕâÖÖÑ­»·Âß¼­ÔÚº¯Êýʽ±à³ÌÓïÑÔÀïÊÇͨ¹ýµÝ¹é¡¢°Ñº¯Êýµ±³É²ÎÊý´«µÝµÄ·½Ê½ÊµÏֵġ£ÍƼöÀÖÓã²¥¿ÍjavaÅàѵ¿Î³Ì¡£

javaº¯Êýʽ±à³Ì

2. Lambda ±í´ïʽ

Java 8µÄ×î´ó±ä»¯ÊÇÒýÈëÁËLambda(Lambda ÊÇÏ£À°×Öĸ λ µÄÓ¢ÎÄÃû³Æ)±í´ïʽ——Ò»ÖÖ½ô´ÕµÄ¡¢´«µÝÐÐΪµÄ·½Ê½¡£

2.1 Lambda ±í´ïʽµÄÐÎʽ

lambda±í´ïʽµÄÓï·¨ÓɲÎÊýÁбí¡¢¼ýÍ··ûºÅ->ºÍº¯ÊýÌå×é³É¡£º¯ÊýÌå¼È¿ÉÒÔÊÇÒ»¸ö±í´ïʽ£¬Ò²¿ÉÒÔÊÇÒ»¸öÓï¾ä¿é¡£

±í´ïʽ£º±í´ïʽ»á±»Ö´ÐÐÈ»ºó·µ»ØÖ´Ðнá¹û¡£

Óï¾ä¿é£ºÓï¾ä¿éÖеÄÓï¾ä»á±»ÒÀ´ÎÖ´ÐУ¬¾ÍÏñ·½·¨ÖеÄÓï¾äÒ»Ñù¡£

returnÓï¾ä»á°Ñ¿ØÖÆÈ¨½»¸øÄäÃû·½·¨µÄµ÷ÓÃÕß¡£

breakºÍcontinueÖ»ÄÜÔÚÑ­»·ÖÐʹÓá£

Èç¹ûº¯ÊýÌåÓзµ»ØÖµ£¬ÄÇôº¯ÊýÌåÄÚ²¿µÄÿһÌõ·¾¶¶¼±ØÐë·µ»ØÖµ¡£

±í´ïʽº¯ÊýÌåÊʺÏСÐÍlambda±í´ïʽ£¬ËüÏû³ýÁËreturn¹Ø¼ü×Ö£¬Ê¹µÃÓï·¨¸ü¼Ó¼ò½à¡£

ÏÂÃæÊÇһЩlambda±í´ïʽ£º

(int x, int y) ©\> x + y
() ©\> 42
(String s) ©\> { System.out.println(s); }

µÚÒ»¸ölambda±í´ïʽ½ÓÊÕx ºÍy ÕâÁ½¸öÕûÐβÎÊý²¢·µ»ØËüÃǵĺÍ;µÚ¶þ¸ölambda±í´ïʽ²»½ÓÊÕ²ÎÊý£¬·µ»ØÕûÊý'42';µÚÈý¸ölambda±í´ïʽ½ÓÊÕÒ»¸ö×Ö·û´®²¢°ÑËü´òÓ¡µ½¿ØÖÆÌ¨£¬²»·µ»ØÖµ¡£

2.2 ³£¼ûÓ¦ÓÃ

2.2.1 Ìæ´úÄäÃûÄÚ²¿Àà

ºÁÎÞÒÉÎÊ£¬lambda±í´ïʽÓõÃ×î¶àµÄ³¡ºÏ¾ÍÊÇÌæ´úÄäÃûÄÚ²¿À࣬¶øÊµÏÖRunnable½Ó¿ÚÊÇÄäÃûÄÚ²¿ÀàµÄ¾­µäÀý×Ó¡£lambda±í´ïʽµÄ¹¦ÄÜÏ൱ǿ´ó£¬ÓÃ()->¾Í¿ÉÒÔ´úÌæÕû¸öÄäÃû

ÄÚ²¿Àà!Çë¿´´úÂ룺

Èç¹ûʹÓÃÄäÃûÄÚ²¿Àࣺ

@Test
public void oldRunable() {
    new Thread(new Runnable() {
       @Override
       public void run() {
          System.out.println("The old runable now is using!");
       }
    }).start();
}


¶øÈç¹ûʹÓÃlambda±í´ïʽ£º

@Test
public void runable() {
    new Thread(() ©\> System.out.println("It's a lambda
    function!")).start();
}

×îºóµÄÊä³ö£º

The old runable now is using!
It's a lambda function!

ÊDz»ÊÇÇ¿´óµ½¿ÉÅÂ?ÊDz»ÊǼòµ¥µ½¿ÉÅÂ?ÊDz»ÊÇÇåÎúÃ÷ÁËÖØµãÍ»³öµ½¿ÉÅÂ?Õâ¾ÍÊÇlambda±í´ïʽµÄ¿ÉÅÂÖ®´¦£¬Óü«ÉٵĴúÂëÍê³ÉÁË֮ǰһ¸öÀà×öµÄÊÂÇé!

2.2.2 ʹÓÃlambda±í´ïʽ¶Ô¼¯ºÏ½øÐеü´ú

JavaµÄ¼¯ºÏÀàÊÇÈÕ³£¿ª·¢Öо­³£Óõ½µÄ£¬ÉõÖÁ˵ûÓÐÄĸöjava´úÂëÖÐûÓÐʹÓõ½¼¯ºÏÀà¡£¡£¡£¶ø¶Ô¼¯ºÏÀà×î³£¼ûµÄ²Ù×÷¾ÍÊǽøÐеü´ú±éÀúÁË¡£Çë¿´¶Ô±È£º

@Test
public void iterTest() {
    List<String> languages = Arrays.asList("java","scala","python");
    //before java8
    for(String each:languages) {
        System.out.println(each);
    }
    //after java8
    languages.forEach(x ©\> System.out.println(x));
    languages.forEach(System.out::println);
}

Èç¹ûÊìϤscalaµÄͬѧ£¬¿Ï¶¨¶ÔforEach²»Ä°Éú¡£Ëü¿ÉÒÔµü´ú¼¯ºÏÖÐËùÓеĶÔÏ󣬲¢ÇÒ½«lambda±í´ïʽ´øÈëÆäÖС£

languages.forEach(System.out::println);

ÕâÒ»Ðп´ÆðÀ´ÓеãÏñc++ÀïÃæ×÷ÓÃÓò½âÎöµÄд·¨£¬ÔÚÕâÀïÒ²ÊÇ¿ÉÒԵġ£

2.2.3 ÓÃlambda±í´ïʽʵÏÖmap

Ò»Ìáµ½º¯Êýʽ±à³Ì£¬Ò»Ìáµ½lambda±í´ïʽ£¬ÔõôÄܲ»Ìámap¡£Ã»´í£¬java8¿Ï¶¨Ò²ÊÇÖ§³ÖµÄ¡£Ç뿴ʾÀý´úÂ룺

@Test
public void mapTest() {
    List<Double> cost = Arrays.asList(10.0, 20.0,30.0);
    cost.stream().map(x ©\> x + x*0.05).forEach(x ©\>
    System.out.println(x));
}

×îºóµÄÊä³ö½á¹û£º

10.5

21.0

31.5

mapº¯Êý¿ÉÒÔ˵ÊǺ¯Êýʽ±à³ÌÀï×îÖØÒªµÄÒ»¸ö·½·¨ÁË¡£mapµÄ×÷ÓÃÊǽ«Ò»¸ö¶ÔÏó±ä»»ÎªÁíÍâÒ»¸ö¡£ÔÚÎÒÃǵÄÀý×ÓÖУ¬¾ÍÊÇͨ¹ýmap·½·¨½«costÔö¼ÓÁË0.05±¶µÄ´óСȻºóÊä³ö¡£

2.2.4 ÓÃlambda±í´ïʽʵÏÖmapÓëreduce

¼ÈÈ»Ìáµ½ÁËmap£¬ÓÖÔõÄܲ»Ìáµ½reduce¡£reduceÓëmapÒ»Ñù£¬Ò²ÊǺ¯Êýʽ±à³ÌÀï×îÖØÒªµÄ¼¸¸ö·½·¨Ö®Ò»¡£mapµÄ×÷ÓÃÊǽ«Ò»¸ö¶ÔÏó±äΪÁíÍâÒ»¸ö£¬¶øreduceʵÏÖµÄÔòÊǽ«ËùÓÐÖµºÏ²¢ÎªÒ»¸ö£¬Çë¿´£º

@Test
public void mapReduceTest() {
    List<Double> cost = Arrays.asList(10.0, 20.0,30.0);
    double allCost = cost.stream().map(x ©\> x+x*0.05).reduce((sum,x)
    ©\> sum + x).get();
    System.out.println(allCost);
}

×îÖյĽá¹ûΪ£º

63.0

Èç¹ûÎÒÃÇÓÃforÑ­»·À´×öÕâ¼þÊÂÇ飺

@Test
public void sumTest() {
    List<Double> cost = Arrays.asList(10.0, 20.0,30.0);
    double sum = 0;
    for(double each:cost) {
        each += each * 0.05;
    sum += each;
    }
    System.out.println(sum);
}


ÏàÐÅÓÃmap+reduce+lambda±í´ïʽµÄд·¨¸ß³ö²»Ö¹Ò»¸ölevel¡£

2.2.5 filter²Ù×÷

filterÒ²ÊÇÎÒÃǾ­³£Ê¹ÓõÄÒ»¸ö²Ù×÷¡£ÔÚ²Ù×÷¼¯ºÏµÄʱºò£¬¾­³£ÐèÒª´ÓԭʼµÄ¼¯ºÏÖйýÂ˵ôÒ»²¿·ÖÔªËØ¡£

@Test
public void filterTest() {
    List<Double> cost = Arrays.asList(10.0, 20.0,30.0,40.0);
    List<Double> filteredCost = cost.stream().filter(x ©\> x > 25.0).collect(Collectors.toList());
    filteredCost.forEach(x ©\> System.out.println(x));
}

×îºóµÄ½á¹û£º

30.0

40.0

²ÂÄãϲ»¶£º

JVMÄÚ´æÄ£ÐÍÏêϸ½éÉÜ

0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿