﻿{"id":489,"date":"2017-10-28T20:38:12","date_gmt":"2017-10-28T12:38:12","guid":{"rendered":"http:\/\/www.chenweikang.top\/?p=489"},"modified":"2017-10-28T20:43:55","modified_gmt":"2017-10-28T12:43:55","slug":"jdk8%e5%8d%81%e5%a4%a7%e6%96%b0%e7%89%b9%e6%80%a7","status":"publish","type":"post","link":"https:\/\/www.chenweikang.top\/?p=489","title":{"rendered":"JDK8 \u5341\u5927\u65b0\u7279\u6027"},"content":{"rendered":"<h2 id=\"\u4e00\u63a5\u53e3\u7684\u9ed8\u8ba4\u65b9\u6cd5\">\u4e00\u3001\u63a5\u53e3\u7684\u9ed8\u8ba4\u65b9\u6cd5<\/h2>\n<p>\u5728\u63a5\u53e3\u4e2d\u65b0\u589e\u4e86<strong>default<\/strong>\u65b9\u6cd5\u548c<strong>static<\/strong>\u65b9\u6cd5\uff0c\u8fd9\u4e24\u79cd\u65b9\u6cd5\u53ef\u4ee5\u6709\u65b9\u6cd5\u4f53<br \/>\n<strong>1\u3001static\u65b9\u6cd5<\/strong><br \/>\n\u793a\u4f8b\u4ee3\u7801\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs cs has-numbering\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">interface<\/span> DefalutTest {\r\n    <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">int<\/span> a =<span class=\"hljs-number\">5<\/span>;\r\n    <span class=\"hljs-keyword\">default<\/span> <span class=\"hljs-keyword\">void<\/span> defaultMethod(){\r\n        System.<span class=\"hljs-keyword\">out<\/span>.println(<span class=\"hljs-string\">\"DefalutTest defalut \u65b9\u6cd5\"<\/span>);\r\n    }\r\n\r\n    <span class=\"hljs-keyword\">int<\/span> sub(<span class=\"hljs-keyword\">int<\/span> a,<span class=\"hljs-keyword\">int<\/span> b);\r\n\r\n    <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> staticMethod() {\r\n        System.<span class=\"hljs-keyword\">out<\/span>.println(<span class=\"hljs-string\">\"DefalutTest static \u65b9\u6cd5\"<\/span>);\r\n    }\r\n}<\/code><\/pre>\n<p>\u63a5\u53e3\u91cc\u7684\u9759\u6001\u65b9\u6cd5\uff0c\u5373static\u4fee\u9970\u7684\u6709\u65b9\u6cd5\u4f53\u7684\u65b9\u6cd5\u4e0d\u4f1a\u88ab\u7ee7\u627f\u6216\u8005\u5b9e\u73b0\uff0c\u4f46\u662f\u9759\u6001\u53d8\u91cf\u4f1a\u88ab\u7ee7\u627f<br \/>\n\u4f8b\u5982\uff1a\u6211\u4eec\u6dfb\u52a0\u4e00\u4e2a\u63a5\u53e3DefalutTest\u7684\u5b9e\u73b0\u7c7bDefaultTestImpl<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs java has-numbering\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">DefaultTestImpl<\/span> <span class=\"hljs-keyword\">implements<\/span> <span class=\"hljs-title\">DefalutTest<\/span>{<\/span>\r\n\r\n    <span class=\"hljs-annotation\">@Override<\/span>\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> <span class=\"hljs-title\">sub<\/span>(<span class=\"hljs-keyword\">int<\/span> a, <span class=\"hljs-keyword\">int<\/span> b) {\r\n        <span class=\"hljs-comment\">\/\/ TODO Auto-generated method stub<\/span>\r\n        <span class=\"hljs-keyword\">return<\/span> a-b;\r\n    }\r\n\r\n}<\/code><\/pre>\n<p>\u5982\u4e0b\u56fe\u6240\u793a\u662f\u8fd9\u4e2a\u5b9e\u73b0\u7c7b\u4e2d\u6240\u6709\u53ef\u8c03\u7528\u7684\u65b9\u6cd5\uff1a<br \/>\n<img decoding=\"async\" title=\"\" src=\"http:\/\/img.blog.csdn.net\/20170330124013234?watermark\/2\/text\/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2R3ODEzMTE5Nw==\/font\/5a6L5L2T\/fontsize\/400\/fill\/I0JBQkFCMA==\/dissolve\/70\/gravity\/SouthEast\" alt=\"\u8fd9\u91cc\u5199\u56fe\u7247\u63cf\u8ff0\" \/><br \/>\n\u5728\u8fd9\u4e9b\u65b9\u6cd5\u91cc\u9762\u6211\u4eec\u65e0\u6cd5\u627e\u5230staticMethod\u65b9\u6cd5\uff0c\u5219\u8bf4\u660e\u63a5\u53e3\u4e2d\u7684static\u65b9\u6cd5\u4e0d\u80fd\u88ab\u5b83\u7684\u5b9e\u73b0\u7c7b\u76f4\u63a5\u4f7f\u7528\u3002\u4f46\u662f\u6211\u4eec\u770b\u5230\u4e86defaultMethod\uff0c\u8bf4\u660e\u5b9e\u73b0\u7c7b\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\u63a5\u53e3\u4e2d\u7684default\u65b9\u6cd5\uff1b<br \/>\n\u90a3\u4e48\u5982\u4f55\u4f7f\u7528\u63a5\u53e3\u4e2d\u7684static\u65b9\u6cd5\u5462\uff1f\uff1f\uff1f<br \/>\n\u63a5\u53e3.static\u65b9\u6cd5\u8c03\u7528\uff0c\u5982\uff1aDefalutTest.staticMethod();<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs cs has-numbering\">    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span>(String[] args) {\r\n        DefaultTestImpl dtl = <span class=\"hljs-keyword\">new<\/span> DefaultTestImpl();\r\n        DefalutTest.staticMethod();\r\n    }<\/code><\/pre>\n<p>\u5f53\u6211\u4eec\u8bd5\u56fe\u4f7f\u7528\u63a5\u53e3\u7684\u5b50\u63a5\u53e3\u53bb\u8c03\u7528\u7236\u63a5\u53e3\u7684static\u65b9\u6cd5\u662f\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\u65e0\u6cd5\u8c03\u7528\uff0c\u627e\u4e0d\u5230\u65b9\u6cd5\uff1a<br \/>\n<img decoding=\"async\" title=\"\" src=\"http:\/\/img.blog.csdn.net\/20170330124515147?watermark\/2\/text\/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2R3ODEzMTE5Nw==\/font\/5a6L5L2T\/fontsize\/400\/fill\/I0JBQkFCMA==\/dissolve\/70\/gravity\/SouthEast\" alt=\"\u8fd9\u91cc\u5199\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p><strong>\u7ed3\u8bba\uff1a\u63a5\u53e3\u4e2d\u7684static\u65b9\u6cd5\u4e0d\u80fd\u88ab\u7ee7\u627f\uff0c\u4e5f\u4e0d\u80fd\u88ab\u5b9e\u73b0\u7c7b\u8c03\u7528\uff0c\u53ea\u80fd\u88ab\u81ea\u8eab\u8c03\u7528<\/strong><\/p>\n<p><strong>2\u3001default\u65b9\u6cd5<\/strong><br \/>\n\u51c6\u5907\u4e00\u4e2a\u5b50\u63a5\u53e3\u7ee7\u627fDefalutTest\u63a5\u53e3<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs java has-numbering\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title\">SubTest<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">DefalutTest<\/span>{<\/span>\r\n\r\n}<\/code><\/pre>\n<p>\u51c6\u5907\u4e00\u4e2a\u5b50\u63a5\u53e3\u7684\u5b9e\u73b0\u7c7b<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs java has-numbering\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SubTestImp<\/span> <span class=\"hljs-keyword\">implements<\/span> <span class=\"hljs-title\">SubTest<\/span>{<\/span>\r\n\r\n    <span class=\"hljs-annotation\">@Override<\/span>\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> <span class=\"hljs-title\">sub<\/span>(<span class=\"hljs-keyword\">int<\/span> a, <span class=\"hljs-keyword\">int<\/span> b) {\r\n        <span class=\"hljs-comment\">\/\/ TODO Auto-generated method stub<\/span>\r\n        <span class=\"hljs-keyword\">return<\/span> a-b;\r\n    }\r\n\r\n}\r\n<\/code><\/pre>\n<p>\u73b0\u5728\u6211\u4eec\u521b\u5efa\u4e00\u4e2a\u5b50\u63a5\u53e3\u5b9e\u73b0\u7c7b\u5bf9\u8c61\uff0c\u5e76\u8c03\u7528\u5bf9\u8c61\u4e2d\u7684default\u65b9\u6cd5\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs cs has-numbering\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> Main {\r\n\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span>(String[] args) {\r\n        SubTestImp stl = <span class=\"hljs-keyword\">new<\/span> SubTestImp();\r\n        stl.defaultMethod();\r\n\r\n    }\r\n}<\/code><\/pre>\n<p>\u6267\u884c\u7ed3\u679c\uff1a<br \/>\nDefalutTest defalut \u65b9\u6cd5<\/p>\n<p><strong>\u7ed3\u8bba1\uff1adefault\u65b9\u6cd5\u53ef\u4ee5\u88ab\u5b50\u63a5\u53e3\u7ee7\u627f\u4ea6\u53ef\u88ab\u5176\u5b9e\u73b0\u7c7b\u6240\u8c03\u7528<\/strong><\/p>\n<p>\u73b0\u5728\u6211\u4eec\u5728\u5b50\u63a5\u53e3\u4e2d\u91cd\u5199default\u65b9\u6cd5\uff0c\u5728\u8fdb\u884c\u8c03\u7528\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs java has-numbering\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title\">SubTest<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">DefalutTest<\/span>{<\/span>\r\n\r\n    <span class=\"hljs-keyword\">default<\/span> <span class=\"hljs-keyword\">void<\/span> defaultMethod(){\r\n        System.out.println(<span class=\"hljs-string\">\"SubTest defalut \u65b9\u6cd5\"<\/span>);\r\n    }\r\n}<\/code><\/pre>\n<p>\u6267\u884c\u7ed3\u679c\uff1aSubTest defalut \u65b9\u6cd5<\/p>\n<p><strong>\u7ed3\u8bba2\uff1adefault\u65b9\u6cd5\u88ab\u7ee7\u627f\u65f6\uff0c\u53ef\u4ee5\u88ab\u5b50\u63a5\u53e3\u8986\u5199<\/strong><\/p>\n<p>\u73b0\u5728\uff0c\u6211\u4eec\u53bb\u9664\u63a5\u53e3\u95f4\u7684\u7ee7\u627f\u5173\u7cfb\uff0c\u5e76\u4f7f\u5f97SubTestImp\u540c\u65f6\u5b9e\u73b0\u7236\u63a5\u53e3\u548c\u5b50\u63a5\u53e3\uff0c\u6211\u4eec\u77e5\u9053\u6b64\u65f6\u7236\u63a5\u53e3\u548c\u5b50\u63a5\u53e3\u4e2d\u5b58\u5728\u540c\u540d\u540c\u53c2\u6570\u7684default\u65b9\u6cd5\uff0c\u8fd9\u4f1a\u600e\u4e48\u6837\uff1f<br \/>\n\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u5b9e\u73b0\u7c7b\u62a5\u9519\uff0c\u5b9e\u73b0\u7c7b\u8981\u6c42\u5fc5\u987b\u6307\u5b9a\u4ed6\u8981\u5b9e\u73b0\u90a3\u4e2a\u63a5\u53e3\u4e2d\u7684default\u65b9\u6cd5<br \/>\n<img decoding=\"async\" title=\"\" src=\"http:\/\/img.blog.csdn.net\/20170330125719712?watermark\/2\/text\/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2R3ODEzMTE5Nw==\/font\/5a6L5L2T\/fontsize\/400\/fill\/I0JBQkFCMA==\/dissolve\/70\/gravity\/SouthEast\" alt=\"\u8fd9\u91cc\u5199\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p><strong>\u7ed3\u8bba3\uff1a\u5982\u679c\u4e00\u4e2a\u7c7b\u5b9e\u73b0\u4e86\u591a\u4e2a\u63a5\u53e3\uff0c\u4e14\u8fd9\u4e9b\u63a5\u53e3\u4e2d\u65e0\u7ee7\u627f\u5173\u7cfb\uff0c\u8fd9\u4e9b\u63a5\u53e3\u4e2d\u82e5\u6709\u76f8\u540c\u7684\uff08\u540c\u540d\uff0c\u540c\u53c2\u6570\uff09\u7684default\u65b9\u6cd5\uff0c\u5219\u63a5\u53e3\u5b9e\u73b0\u7c7b\u4f1a\u62a5\u9519\uff0c\u63a5\u53e3\u5b9e\u73b0\u7c7b\u5fc5\u987b\u901a\u8fc7\u7279\u6b8a\u8bed\u6cd5\u6307\u5b9a\u8be5\u5b9e\u73b0\u7c7b\u8981\u5b9e\u73b0\u90a3\u4e2a\u63a5\u53e3\u7684default\u65b9\u6cd5<\/strong><br \/>\n\u7279\u6b8a\u8bed\u6cd5\uff1a<code>&lt;\u63a5\u53e3&gt;.super.&lt;\u65b9\u6cd5\u540d&gt;([\u53c2\u6570])<\/code><br \/>\n\u793a\u4f8b\u4ee3\u7801\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs java has-numbering\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SubTestImp<\/span> <span class=\"hljs-keyword\">implements<\/span> <span class=\"hljs-title\">SubTest<\/span>,<span class=\"hljs-title\">DefalutTest<\/span>{<\/span>\r\n\r\n    <span class=\"hljs-annotation\">@Override<\/span>\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> <span class=\"hljs-title\">sub<\/span>(<span class=\"hljs-keyword\">int<\/span> a, <span class=\"hljs-keyword\">int<\/span> b) {\r\n        <span class=\"hljs-comment\">\/\/ TODO Auto-generated method stub<\/span>\r\n        <span class=\"hljs-keyword\">return<\/span> a-b;\r\n    }\r\n\r\n    <span class=\"hljs-annotation\">@Override<\/span>\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">defaultMethod<\/span>() {\r\n        <span class=\"hljs-comment\">\/\/ TODO Auto-generated method stub<\/span>\r\n        DefalutTest.<span class=\"hljs-keyword\">super<\/span>.defaultMethod();\r\n    }\r\n\r\n}<\/code><\/pre>\n<p>\u4f7f\u7528\u793a\u4f8b\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs cpp has-numbering\"><span class=\"hljs-comment\">\/\/\u63a5\u53e3\u4ee3\u7801<\/span>\r\ninterface Formula {\r\n    <span class=\"hljs-keyword\">double<\/span> calculate(<span class=\"hljs-keyword\">int<\/span> a);\r\n    <span class=\"hljs-keyword\">default<\/span> <span class=\"hljs-keyword\">double<\/span> <span class=\"hljs-built_in\">sqrt<\/span>(<span class=\"hljs-keyword\">int<\/span> a) {\r\n        <span class=\"hljs-keyword\">return<\/span> Math.<span class=\"hljs-built_in\">sqrt<\/span>(a);\r\n    }\r\n}\r\n<span class=\"hljs-comment\">\/\/\u5b9e\u73b0<\/span>\r\nFormula formula = <span class=\"hljs-keyword\">new<\/span> Formula() {\r\n    @Override\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">double<\/span> calculate(<span class=\"hljs-keyword\">int<\/span> a) {\r\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">sqrt<\/span>(a * <span class=\"hljs-number\">100<\/span>);\r\n    }\r\n};\r\nformula.calculate(<span class=\"hljs-number\">100<\/span>);     <span class=\"hljs-comment\">\/\/ 100.0<\/span>\r\nformula.<span class=\"hljs-built_in\">sqrt<\/span>(<span class=\"hljs-number\">16<\/span>);           <span class=\"hljs-comment\">\/\/ 4.0<\/span><\/code><\/pre>\n<h2 id=\"\u4e8clambda-\u8868\u8fbe\u5f0f\"><a target=\"_blank\" name=\"t1\"><\/a>\u4e8c\u3001Lambda \u8868\u8fbe\u5f0f<\/h2>\n<p>Lambda\u8868\u8fbe\u5f0f\u53ef\u4ee5\u770b\u6210\u662f\u533f\u540d\u5185\u90e8\u7c7b\uff0c\u4f7f\u7528Lambda\u8868\u8fbe\u5f0f\u65f6\uff0c\u63a5\u53e3\u5fc5\u987b\u662f<strong>\u51fd\u6570\u5f0f\u63a5\u53e3<\/strong><\/p>\n<p><strong>\u57fa\u672c\u8bed\u6cd5\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs coffeescript has-numbering\">            &lt;\u51fd\u6570\u5f0f\u63a5\u53e3&gt;  &lt;\u53d8\u91cf\u540d&gt; = <span class=\"hljs-function\"><span class=\"hljs-params\">(\u53c2\u6570<span class=\"hljs-number\">1<\/span>\uff0c\u53c2\u6570<span class=\"hljs-number\">2.<\/span>..)<\/span> -&gt;<\/span> {\r\n                    <span class=\"hljs-regexp\">\/\/<\/span>\u65b9\u6cd5\u4f53\r\n        }<\/code><\/pre>\n<p><strong>\u8bf4\u660e\uff1a<\/strong><br \/>\n(\u53c2\u65701\uff0c\u53c2\u65702\u2026)\u8868\u793a\u53c2\u6570\u5217\u8868\uff1b-&gt;\u8868\u793a\u8fde\u63a5\u7b26\uff1b{}\u5185\u90e8\u662f\u65b9\u6cd5\u4f53<br \/>\n1\u3001=\u53f3\u8fb9\u7684\u7c7b\u578b\u4f1a\u6839\u636e\u5de6\u8fb9\u7684\u51fd\u6570\u5f0f\u63a5\u53e3\u7c7b\u578b\u81ea\u52a8\u63a8\u65ad\uff1b<br \/>\n2\u3001\u5982\u679c\u5f62\u53c2\u5217\u8868\u4e3a\u7a7a\uff0c\u53ea\u9700\u4fdd\u7559()\uff1b<br \/>\n3\u3001\u5982\u679c\u5f62\u53c2\u53ea\u67091\u4e2a\uff0c()\u53ef\u4ee5\u7701\u7565\uff0c\u53ea\u9700\u8981\u53c2\u6570\u7684\u540d\u79f0\u5373\u53ef\uff1b<br \/>\n4\u3001\u5982\u679c\u6267\u884c\u8bed\u53e5\u53ea\u67091\u53e5\uff0c\u4e14\u65e0\u8fd4\u56de\u503c\uff0c{}\u53ef\u4ee5\u7701\u7565\uff0c\u82e5\u6709\u8fd4\u56de\u503c\uff0c\u5219\u82e5\u60f3\u7701\u53bb{}\uff0c\u5219\u5fc5\u987b\u540c\u65f6\u7701\u7565return\uff0c\u4e14\u6267\u884c\u8bed\u53e5\u4e5f\u4fdd\u8bc1\u53ea\u67091\u53e5\uff1b<br \/>\n5\u3001\u5f62\u53c2\u5217\u8868\u7684\u6570\u636e\u7c7b\u578b\u4f1a\u81ea\u52a8\u63a8\u65ad\uff1b<br \/>\n6\u3001lambda\u4e0d\u4f1a\u751f\u6210\u4e00\u4e2a\u5355\u72ec\u7684\u5185\u90e8\u7c7b\u6587\u4ef6\uff1b<br \/>\n7\u3001lambda\u8868\u8fbe\u5f0f\u82e5\u8bbf\u95ee\u4e86\u5c40\u90e8\u53d8\u91cf\uff0c\u5219\u5c40\u90e8\u53d8\u91cf\u5fc5\u987b\u662ffinal\u7684\uff0c\u82e5\u662f\u5c40\u90e8\u53d8\u91cf\u6ca1\u6709\u52a0final\u5173\u952e\u5b57\uff0c\u7cfb\u7edf\u4f1a\u81ea\u52a8\u6dfb\u52a0\uff0c\u6b64\u540e\u5728\u4fee\u6539\u8be5\u5c40\u90e8\u53d8\u91cf\uff0c\u4f1a\u62a5\u9519\uff1b<\/p>\n<p><strong>\u793a\u4f8b\u4ee3\u7801\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs cs has-numbering\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">interface<\/span> LambdaTest {\r\n\r\n    <span class=\"hljs-keyword\">abstract<\/span> <span class=\"hljs-keyword\">void<\/span> print();\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">interface<\/span> LambdaTest2 {\r\n\r\n    <span class=\"hljs-keyword\">abstract<\/span> <span class=\"hljs-keyword\">void<\/span> print(String a);\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">interface<\/span> DefalutTest {\r\n\r\n    <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">int<\/span> a =<span class=\"hljs-number\">5<\/span>;\r\n    <span class=\"hljs-keyword\">default<\/span> <span class=\"hljs-keyword\">void<\/span> defaultMethod(){\r\n        System.<span class=\"hljs-keyword\">out<\/span>.println(<span class=\"hljs-string\">\"DefalutTest defalut \u65b9\u6cd5\"<\/span>);\r\n    }\r\n\r\n    <span class=\"hljs-keyword\">int<\/span> sub(<span class=\"hljs-keyword\">int<\/span> a,<span class=\"hljs-keyword\">int<\/span> b);\r\n\r\n    <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> staticMethod() {\r\n        System.<span class=\"hljs-keyword\">out<\/span>.println(<span class=\"hljs-string\">\"DefalutTest static \u65b9\u6cd5\"<\/span>);\r\n    }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> Main {\r\n\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span>(String[] args) {\r\n        <span class=\"hljs-comment\">\/\/\u533f\u540d\u5185\u90e8\u7c7b--java8\u4e4b\u524d\u7684\u5b9e\u73b0\u65b9\u5f0f<\/span>\r\n        DefalutTest dt = <span class=\"hljs-keyword\">new<\/span> DefalutTest(){\r\n            @Override\r\n            <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> <span class=\"hljs-title\">sub<\/span>(<span class=\"hljs-keyword\">int<\/span> a, <span class=\"hljs-keyword\">int<\/span> b) {\r\n                <span class=\"hljs-comment\">\/\/ TODO Auto-generated method stub<\/span>\r\n                <span class=\"hljs-keyword\">return<\/span> a-b;\r\n            }\r\n        };\r\n\r\n        <span class=\"hljs-comment\">\/\/lambda\u8868\u8fbe\u5f0f--\u5b9e\u73b0\u65b9\u5f0f1<\/span>\r\n        DefalutTest dt2 =(a,b)-&gt;{\r\n            <span class=\"hljs-keyword\">return<\/span> a-b;\r\n        };\r\n        System.<span class=\"hljs-keyword\">out<\/span>.println(dt2.sub(<span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">1<\/span>));\r\n\r\n        <span class=\"hljs-comment\">\/\/lambda\u8868\u8fbe\u5f0f--\u5b9e\u73b0\u65b9\u5f0f2\uff0c\u7701\u7565\u82b1\u62ec\u53f7<\/span>\r\n        DefalutTest dt3 =(a,b)-&gt;a-b;\r\n        System.<span class=\"hljs-keyword\">out<\/span>.println(dt3.sub(<span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">6<\/span>));\r\n\r\n        <span class=\"hljs-comment\">\/\/\u6d4b\u8bd5final<\/span>\r\n        <span class=\"hljs-keyword\">int<\/span> c = <span class=\"hljs-number\">5<\/span>;\r\n        DefalutTest dt4 =(a,b)-&gt;a-c;\r\n        System.<span class=\"hljs-keyword\">out<\/span>.println(dt4.sub(<span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">6<\/span>));\r\n\r\n        <span class=\"hljs-comment\">\/\/\u65e0\u53c2\u65b9\u6cd5\uff0c\u5e76\u4e14\u6267\u884c\u8bed\u53e5\u53ea\u67091\u6761<\/span>\r\n        LambdaTest lt = ()-&gt; System.<span class=\"hljs-keyword\">out<\/span>.println(<span class=\"hljs-string\">\"\u6d4b\u8bd5\u65e0\u53c2\"<\/span>);\r\n        lt.print();\r\n        <span class=\"hljs-comment\">\/\/\u53ea\u6709\u4e00\u4e2a\u53c2\u6570\u65b9\u6cd5<\/span>\r\n        LambdaTest2 lt1 = s-&gt; System.<span class=\"hljs-keyword\">out<\/span>.println(s);\r\n        lt1.print(<span class=\"hljs-string\">\"\u6709\u4e00\u4e2a\u53c2\u6570\"<\/span>);\r\n    }\r\n}<\/code><\/pre>\n<p>\u5c40\u90e8\u53d8\u91cf\u4fee\u6539\u62a5\u9519\u5982\u56fe\uff1a<br \/>\n<img decoding=\"async\" title=\"\" src=\"http:\/\/img.blog.csdn.net\/20170330153048130?watermark\/2\/text\/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2R3ODEzMTE5Nw==\/font\/5a6L5L2T\/fontsize\/400\/fill\/I0JBQkFCMA==\/dissolve\/70\/gravity\/SouthEast\" alt=\"\u8fd9\u91cc\u5199\u56fe\u7247\u63cf\u8ff0\" \/><br \/>\n\u82e5\u662f\u5f3a\u884c\u4fee\u6539\u4e5f\u65e0\u6cd5\u7f16\u8bd1\u901a\u8fc7<\/p>\n<p><strong><em>Lambda\u8868\u8fbe\u5f0f\u5176\u4ed6\u7279\u6027\uff1a<\/em><\/strong><\/p>\n<p><strong>1\u3001\u5f15\u7528\u5b9e\u4f8b\u65b9\u6cd5\uff1a<\/strong><br \/>\n<strong>\u8bed\u6cd5\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs r has-numbering\">    &lt;\u51fd\u6570\u5f0f\u63a5\u53e3&gt;  &lt;\u53d8\u91cf\u540d&gt; = &lt;\u5b9e\u4f8b&gt;::&lt;\u5b9e\u4f8b\u65b9\u6cd5\u540d&gt;\r\n    \/\/\u8c03\u7528\r\n    &lt;\u53d8\u91cf\u540d&gt;.\u63a5\u53e3\u65b9\u6cd5([\u5b9e\u9645\u53c2\u6570<span class=\"hljs-keyword\">...<\/span>])<\/code><\/pre>\n<p>\u5c06\u8c03\u7528\u65b9\u6cd5\u65f6\u7684\u4f20\u9012\u7684\u5b9e\u9645\u53c2\u6570\uff0c\u5168\u90e8\u4f20\u9012\u7ed9\u5f15\u7528\u7684\u65b9\u6cd5\uff0c\u6267\u884c\u5f15\u7528\u7684\u65b9\u6cd5\uff1b<br \/>\n<strong>\u793a\u4f8b\u4ee3\u7801\uff1a<\/strong><br \/>\n\u5982\u6211\u4eec\u5f15\u7528PrintStream\u7c7b\u4e2d\u7684println\u65b9\u6cd5\u3002\u6211\u4eec\u77e5\u9053System\u7c7b\u4e2d\u6709\u4e00\u4e2aPrintStream\u7684\u5b9e\u4f8b\u4e3aout\uff0c\u5f15\u7528\u8be5\u5b9e\u4f8b\u65b9\u6cd5\uff1aSystem.out::println\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs cs has-numbering\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> Main {\r\n\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span>(String[] args) {\r\n\r\n        LambdaTest2 lt1 = s-&gt; System.<span class=\"hljs-keyword\">out<\/span>.println(s);\r\n        lt1.print(<span class=\"hljs-string\">\"\u6709\u4e00\u4e2a\u53c2\u6570\"<\/span>);\r\n\r\n        <span class=\"hljs-comment\">\/\/\u6539\u5199\u4e3a\uff1a<\/span>\r\n        LambdaTest2 lt2 = System.<span class=\"hljs-keyword\">out<\/span>::println;\r\n        lt2.print(<span class=\"hljs-string\">\"\u5b9e\u4f8b\u5f15\u7528\u65b9\u5f0f\u8c03\u7528\"<\/span>);\r\n    }\r\n}<\/code><\/pre>\n<p>\u5c06lt2\u8c03\u7528\u65f6\u7684\u5b9e\u9645\u53c2\u6570\u4f20\u9012\u7ed9\u4e86PrintStream\u7c7b\u4e2d\u7684println\u65b9\u6cd5\uff0c\u5e76\u8c03\u7528\u8be5\u65b9\u6cd5<\/p>\n<p><strong>2\u3001\u5f15\u7528\u7c7b\u65b9\u6cd5\uff1a<\/strong><br \/>\n<strong>\u8bed\u6cd5\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs r has-numbering\">    &lt;\u51fd\u6570\u5f0f\u63a5\u53e3&gt;  &lt;\u53d8\u91cf\u540d&gt; = &lt;\u7c7b&gt;::&lt;\u7c7b\u65b9\u6cd5\u540d\u79f0&gt;\r\n    \/\/\u8c03\u7528\r\n    &lt;\u53d8\u91cf\u540d&gt;.\u63a5\u53e3\u65b9\u6cd5([\u5b9e\u9645\u53c2\u6570<span class=\"hljs-keyword\">...<\/span>])<\/code><\/pre>\n<p>\u5c06\u8c03\u7528\u65b9\u6cd5\u65f6\u7684\u4f20\u9012\u7684\u5b9e\u9645\u53c2\u6570\uff0c\u5168\u90e8\u4f20\u9012\u7ed9\u5f15\u7528\u7684\u65b9\u6cd5\uff0c\u6267\u884c\u5f15\u7528\u7684\u65b9\u6cd5\uff1b<br \/>\n<strong>\u793a\u4f8b\u4ee3\u7801\uff1a<\/strong><br \/>\n\u6211\u4eec\u53ef\u4ee5\u4ee5\u6570\u7ec4\u6392\u5e8f\u65b9\u5f0f\u4e3a\u4f8b<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs cs has-numbering\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">interface<\/span> LambdaTest3 {\r\n\r\n    <span class=\"hljs-keyword\">abstract<\/span> <span class=\"hljs-keyword\">void<\/span> sort(<span class=\"hljs-keyword\">int<\/span>[] args);\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> Main {\r\n\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span>(String[] args) {\r\n        List&lt;Integer&gt;  list = <span class=\"hljs-keyword\">new<\/span> ArrayList&lt;Integer&gt;();\r\n        list.add(<span class=\"hljs-number\">50<\/span>);\r\n        list.add(<span class=\"hljs-number\">18<\/span>);\r\n        list.add(<span class=\"hljs-number\">6<\/span>);\r\n        list.add(<span class=\"hljs-number\">99<\/span>);\r\n        list.add(<span class=\"hljs-number\">32<\/span>);\r\n        System.<span class=\"hljs-keyword\">out<\/span>.println(list.toString()+<span class=\"hljs-string\">\"\u6392\u5e8f\u4e4b\u524d\"<\/span>);\r\n        LambdaTest3 lt3 = Collections::sort;\r\n        lt3.sort(list, (a,b) -&gt; {\r\n            <span class=\"hljs-keyword\">return<\/span> a-b;\r\n        });\r\n        System.<span class=\"hljs-keyword\">out<\/span>.println(list.toString()+<span class=\"hljs-string\">\"\u6392\u5e8f\u4e4b\u540e\"<\/span>);\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>\u6267\u884c\u7ed3\u679c\uff1a<br \/>\n[50, 18, 6, 99, 32]\u6392\u5e8f\u4e4b\u524d<br \/>\n[6, 18, 32, 50, 99]\u6392\u5e8f\u4e4b\u540e<\/p>\n<p>\u518d\u6765\u770bComparator\u63a5\u53e3\uff0c\u5b83\u5c5e\u4e8e\u51fd\u6570\u5f0f\u63a5\u53e3\uff0c\u6240\u4ee5\u6211\u4eec\u5728Comparator\u5165\u53c2\u65f6\uff0c\u4e5f\u91c7\u53d6\u4e86lambda\u8868\u8fbe\u5f0f\u5199\u6cd5\u3002<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs r has-numbering\">@FunctionalInterface\r\npublic interface Comparator&lt;<span class=\"hljs-literal\">T<\/span>&gt; {\r\n<span class=\"hljs-keyword\">...<\/span>\r\n<span class=\"hljs-keyword\">...<\/span>\r\n<span class=\"hljs-keyword\">...<\/span>\r\n}<\/code><\/pre>\n<p><strong>3\u3001\u5f15\u7528\u7c7b\u7684\u5b9e\u4f8b\u65b9\u6cd5\uff1a<\/strong><br \/>\n\u5b9a\u4e49\u3001\u8c03\u7528\u63a5\u53e3\u65f6\uff0c\u9700\u8981\u591a\u4f20\u9012\u4e00\u4e2a\u53c2\u6570\uff0c\u5e76\u4e14\u53c2\u6570\u7684\u7c7b\u578b\u4e0e\u5f15\u7528\u5b9e\u4f8b\u7684\u7c7b\u578b\u4e00\u81f4<br \/>\n<strong>\u8bed\u6cd5\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs r has-numbering\">    \/\/\u5b9a\u4e49\u63a5\u53e3\r\n    interface &lt;\u51fd\u6570\u5f0f\u63a5\u53e3&gt;{\r\n        &lt;\u8fd4\u56de\u503c&gt; &lt;\u65b9\u6cd5\u540d&gt;(&lt;\u7c7b&gt;&lt;\u7c7b\u540d\u79f0&gt;,[\u5176\u4ed6\u53c2\u6570<span class=\"hljs-keyword\">...<\/span>]); \r\n    }\r\n    &lt;\u51fd\u6570\u5f0f\u63a5\u53e3&gt;  &lt;\u53d8\u91cf\u540d&gt; = &lt;\u7c7b&gt;::&lt;\u7c7b\u5b9e\u4f8b\u65b9\u6cd5\u540d&gt;\r\n    \/\/\u8c03\u7528\r\n    &lt;\u53d8\u91cf\u540d&gt;.\u63a5\u53e3\u65b9\u6cd5(\u7c7b\u7684\u5b9e\u4f8b,[\u5b9e\u9645\u53c2\u6570<span class=\"hljs-keyword\">...<\/span>])<\/code><\/pre>\n<p>\u5c06\u8c03\u7528\u65b9\u6cd5\u65f6\u7684\u4f20\u9012\u7684\u5b9e\u9645\u53c2\u6570\uff0c\u4ece\u7b2c\u4e8c\u4e2a\u53c2\u6570\u5f00\u59cb\uff08\u7b2c\u4e00\u4e2a\u53c2\u6570\u6307\u5b9a\u7684\u7c7b\u7684\u5b9e\u4f8b\uff09\uff0c\u5168\u90e8\u4f20\u9012\u7ed9\u5f15\u7528\u7684\u65b9\u6cd5\uff0c\u6267\u884c\u5f15\u7528\u7684\u65b9\u6cd5\uff1b<br \/>\n<strong>\u793a\u4f8b\u4ee3\u7801\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs cs has-numbering\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> LambdaClassTest {\r\n\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> <span class=\"hljs-title\">add<\/span>(<span class=\"hljs-keyword\">int<\/span> a, <span class=\"hljs-keyword\">int<\/span> b){\r\n        System.<span class=\"hljs-keyword\">out<\/span>.println(<span class=\"hljs-string\">\"LambdaClassTest\u7c7b\u7684add\u65b9\u6cd5\"<\/span>);\r\n        <span class=\"hljs-keyword\">return<\/span> a+b;\r\n    }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">interface<\/span> LambdaTest4 {\r\n\r\n    <span class=\"hljs-keyword\">abstract<\/span> <span class=\"hljs-keyword\">int<\/span> add(LambdaClassTest lt,<span class=\"hljs-keyword\">int<\/span> a,<span class=\"hljs-keyword\">int<\/span> b);\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> Main {\r\n\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span>(String[] args) {\r\n        LambdaTest4 lt4 = LambdaClassTest::add;\r\n        LambdaClassTest lct = <span class=\"hljs-keyword\">new<\/span> LambdaClassTest();\r\n        System.<span class=\"hljs-keyword\">out<\/span>.println(lt4.add(lct, <span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">8<\/span>));\r\n    }\r\n}<\/code><\/pre>\n<p><strong>4\u3001\u5f15\u7528\u6784\u9020\u5668\u65b9\u6cd5\uff1a<\/strong><br \/>\n<strong>\u8bed\u6cd5\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs r has-numbering\">    &lt;\u51fd\u6570\u5f0f\u63a5\u53e3&gt;  &lt;\u53d8\u91cf\u540d&gt; = &lt;\u7c7b&gt;::&lt;new&gt;\r\n    \/\/\u8c03\u7528\r\n    &lt;\u53d8\u91cf\u540d&gt;.\u63a5\u53e3\u65b9\u6cd5([\u5b9e\u9645\u53c2\u6570<span class=\"hljs-keyword\">...<\/span>])<\/code><\/pre>\n<p>\u628a\u65b9\u6cd5\u7684\u6240\u6709\u53c2\u6570\u5168\u90e8\u4f20\u9012\u7ed9\u5f15\u7528\u7684\u6784\u9020\u5668\uff0c\u6839\u636e\u53c2\u6570\u7c7b\u578b\u81ea\u52a8\u63a8\u65ad\u8c03\u7528\u7684\u6784\u9020\u5668\u65b9\u6cd5\uff1b<br \/>\n<strong>\u793a\u4f8b\u4ee3\u7801\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs cs has-numbering\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">interface<\/span> LambdaTest5 {\r\n\r\n    <span class=\"hljs-keyword\">abstract<\/span> String creatString(<span class=\"hljs-keyword\">char<\/span>[] c);\r\n}\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> Main {\r\n\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span>(String[] args) {\r\n        LambdaTest5 lt5 = String::<span class=\"hljs-keyword\">new<\/span>;\r\n        System.<span class=\"hljs-keyword\">out<\/span>.println(lt5.creatString(<span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-keyword\">char<\/span>[]{<span class=\"hljs-string\">'1'<\/span>,<span class=\"hljs-string\">'2'<\/span>,<span class=\"hljs-string\">'3'<\/span>,<span class=\"hljs-string\">'a'<\/span>}));\r\n    }\r\n}<\/code><\/pre>\n<p>\u6839\u636e\u4f20\u5165\u7684\u53c2\u6570\u7c7b\u578b\uff0c\u81ea\u52a8\u5339\u914d\u6784\u9020\u51fd\u6570<\/p>\n<h2 id=\"\u4e09\u51fd\u6570\u5f0f\u63a5\u53e3\"><a target=\"_blank\" name=\"t2\"><\/a>\u4e09\u3001\u51fd\u6570\u5f0f\u63a5\u53e3<\/h2>\n<p>\u5982\u679c\u4e00\u4e2a\u63a5\u53e3\u53ea\u6709\u4e00\u4e2a\u62bd\u8c61\u65b9\u6cd5\uff0c\u5219\u8be5\u63a5\u53e3\u79f0\u4e4b\u4e3a\u51fd\u6570\u5f0f\u63a5\u53e3\uff0c\u56e0\u4e3a \u9ed8\u8ba4\u65b9\u6cd5 \u4e0d\u7b97\u62bd\u8c61\u65b9\u6cd5\uff0c\u6240\u4ee5\u4f60\u4e5f\u53ef\u4ee5\u7ed9\u4f60\u7684\u51fd\u6570\u5f0f\u63a5\u53e3\u6dfb\u52a0\u9ed8\u8ba4\u65b9\u6cd5\u3002<br \/>\n\u51fd\u6570\u5f0f\u63a5\u53e3\u53ef\u4ee5\u4f7f\u7528Lambda\u8868\u8fbe\u5f0f\uff0clambda\u8868\u8fbe\u5f0f\u4f1a\u88ab\u5339\u914d\u5230\u8fd9\u4e2a\u62bd\u8c61\u65b9\u6cd5\u4e0a<br \/>\n\u6211\u4eec\u53ef\u4ee5\u5c06lambda\u8868\u8fbe\u5f0f\u5f53\u4f5c\u4efb\u610f\u53ea\u5305\u542b\u4e00\u4e2a\u62bd\u8c61\u65b9\u6cd5\u7684\u63a5\u53e3\u7c7b\u578b\uff0c\u786e\u4fdd\u4f60\u7684\u63a5\u53e3\u4e00\u5b9a\u8fbe\u5230\u8fd9\u4e2a\u8981\u6c42\uff0c\u4f60\u53ea\u9700\u8981\u7ed9\u4f60\u7684\u63a5\u53e3\u6dfb\u52a0 @FunctionalInterface \u6ce8\u89e3\uff0c\u7f16\u8bd1\u5668\u5982\u679c\u53d1\u73b0\u4f60\u6807\u6ce8\u4e86\u8fd9\u4e2a\u6ce8\u89e3\u7684\u63a5\u53e3\u6709\u591a\u4e8e\u4e00\u4e2a\u62bd\u8c61\u65b9\u6cd5\u7684\u65f6\u5019\u4f1a\u62a5\u9519\u7684<\/p>\n<p><strong>\u793a\u4f8b\u4ee3\u7801\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs cs has-numbering\">@FunctionalInterface\r\n<span class=\"hljs-keyword\">interface<\/span> Converter&lt;F, T&gt; {\r\n    T convert(F <span class=\"hljs-keyword\">from<\/span>);\r\n}\r\nConverter&lt;String, Integer&gt; converter = (<span class=\"hljs-keyword\">from<\/span>) -&gt; Integer.valueOf(<span class=\"hljs-keyword\">from<\/span>);\r\nInteger converted = converter.convert(<span class=\"hljs-string\">\"123\"<\/span>);\r\nSystem.<span class=\"hljs-keyword\">out<\/span>.println(converted);    <span class=\"hljs-comment\">\/\/ 123<\/span><\/code><\/pre>\n<h2 id=\"\u4e94lambda-\u4f5c\u7528\u57df\"><a target=\"_blank\" name=\"t3\"><\/a>\u4e94\u3001Lambda \u4f5c\u7528\u57df<\/h2>\n<p>\u5728lambda\u8868\u8fbe\u5f0f\u4e2d\u8bbf\u95ee\u5916\u5c42\u4f5c\u7528\u57df\u548c\u8001\u7248\u672c\u7684\u533f\u540d\u5bf9\u8c61\u4e2d\u7684\u65b9\u5f0f\u5f88\u76f8\u4f3c\u3002\u4f60\u53ef\u4ee5\u76f4\u63a5\u8bbf\u95ee\u6807\u8bb0\u4e86final\u7684\u5916\u5c42\u5c40\u90e8\u53d8\u91cf\uff0c\u6216\u8005\u5b9e\u4f8b\u7684\u5b57\u6bb5\u4ee5\u53ca\u9759\u6001\u53d8\u91cf\u3002<\/p>\n<h2 id=\"\u516d\u8bbf\u95ee\u5c40\u90e8\u53d8\u91cf\"><a target=\"_blank\" name=\"t4\"><\/a>\u516d\u3001\u8bbf\u95ee\u5c40\u90e8\u53d8\u91cf<\/h2>\n<p>\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u5728lambda\u8868\u8fbe\u5f0f\u4e2d\u8bbf\u95ee\u5916\u5c42\u7684\u5c40\u90e8\u53d8\u91cf\uff0c\u4f46\u662f\u8be5\u5c40\u90e8\u53d8\u91cf\u5fc5\u987b\u662ffinal\u7684\uff0c\u5373\u4f7f\u6ca1\u6709\u52a0final\u5173\u952e\u5b57\uff0c\u4e4b\u540e\u6211\u4eec\u65e0\u8bba\u5728\u54ea\uff08lambda\u8868\u8fbe\u5f0f\u5185\u90e8\u6216\u5916\u90e8\uff09\u4fee\u6539\u8be5\u53d8\u91cf\uff0c\u5747\u62a5\u9519\u3002<\/p>\n<h2 id=\"\u4e03\u8bbf\u95ee\u5bf9\u8c61\u5b57\u6bb5\u4e0e\u9759\u6001\u53d8\u91cf\"><a target=\"_blank\" name=\"t5\"><\/a>\u4e03\u3001\u8bbf\u95ee\u5bf9\u8c61\u5b57\u6bb5\u4e0e\u9759\u6001\u53d8\u91cf<\/h2>\n<p>lambda\u5185\u90e8\u5bf9\u4e8e\u5b9e\u4f8b\u7684\u5b57\u6bb5\u4ee5\u53ca\u9759\u6001\u53d8\u91cf\u662f\u5373\u53ef\u8bfb\u53c8\u53ef\u5199\u3002\u8be5\u884c\u4e3a\u548c\u533f\u540d\u5bf9\u8c61\u662f\u4e00\u81f4\u7684\uff1b<\/p>\n<p><strong>\u793a\u4f8b\u4ee3\u7801\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs coffeescript has-numbering\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Lambda4<\/span> {<\/span>\r\n    static int outerStaticNum;\r\n    int outerNum;\r\n    <span class=\"hljs-reserved\">void<\/span> testScopes() {\r\n        Converter&lt;Integer, String&gt; <span class=\"hljs-function\"><span class=\"hljs-title\">stringConverter1<\/span> = <span class=\"hljs-params\">(from)<\/span> -&gt;<\/span> {\r\n            outerNum = <span class=\"hljs-number\">23<\/span>;\r\n            <span class=\"hljs-keyword\">return<\/span> String.valueOf(from);\r\n        };\r\n        Converter&lt;Integer, String&gt; <span class=\"hljs-function\"><span class=\"hljs-title\">stringConverter2<\/span> = <span class=\"hljs-params\">(from)<\/span> -&gt;<\/span> {\r\n            outerStaticNum = <span class=\"hljs-number\">72<\/span>;\r\n            <span class=\"hljs-keyword\">return<\/span> String.valueOf(from);\r\n        };\r\n    }\r\n}<\/code><\/pre>\n<h2 id=\"\u516b\u8bbf\u95ee\u63a5\u53e3\u7684\u9ed8\u8ba4\u65b9\u6cd5\"><a target=\"_blank\" name=\"t6\"><\/a>\u516b\u3001\u8bbf\u95ee\u63a5\u53e3\u7684\u9ed8\u8ba4\u65b9\u6cd5<\/h2>\n<p><strong>Predicate\u63a5\u53e3<\/strong><br \/>\nPredicate \u63a5\u53e3\u53ea\u6709\u4e00\u4e2a\u53c2\u6570\uff0c\u8fd4\u56deboolean\u7c7b\u578b\u3002\u8be5\u63a5\u53e3\u5305\u542b\u591a\u79cd\u9ed8\u8ba4\u65b9\u6cd5\u6765\u5c06Predicate\u7ec4\u5408\u6210\u5176\u4ed6\u590d\u6742\u7684\u903b\u8f91\uff08\u6bd4\u5982\uff1a\u4e0e\uff0c\u6216\uff0c\u975e\uff09\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">    public static void main(String[] args) {\r\n        Predicate&lt;String&gt; predicate = (s) -&gt; s<span class=\"hljs-preprocessor\">.length<\/span>() &gt; <span class=\"hljs-number\">0<\/span><span class=\"hljs-comment\">;<\/span>\r\n        System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(predicate<span class=\"hljs-preprocessor\">.test<\/span>(<span class=\"hljs-string\">\"foo\"<\/span>))<span class=\"hljs-comment\">;              \/\/ true<\/span>\r\n        System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(predicate<span class=\"hljs-preprocessor\">.negate<\/span>()<span class=\"hljs-preprocessor\">.test<\/span>(<span class=\"hljs-string\">\"foo\"<\/span>))<span class=\"hljs-comment\">;     \/\/ false<\/span>\r\n        Predicate&lt;Boolean&gt; nonNull = Objects::nonNull<span class=\"hljs-comment\">;<\/span>\r\n        Predicate&lt;Boolean&gt; isNull = Objects::isNull<span class=\"hljs-comment\">;<\/span>\r\n        Predicate&lt;String&gt; isEmpty = String::isEmpty<span class=\"hljs-comment\">;<\/span>\r\n        Predicate&lt;String&gt; isNotEmpty = isEmpty<span class=\"hljs-preprocessor\">.negate<\/span>()<span class=\"hljs-comment\">;<\/span>\r\n        System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(nonNull<span class=\"hljs-preprocessor\">.test<\/span>(null))<span class=\"hljs-comment\">;<\/span>\r\n        System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(isNull<span class=\"hljs-preprocessor\">.test<\/span>(null))<span class=\"hljs-comment\">;<\/span>\r\n        System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(isEmpty<span class=\"hljs-preprocessor\">.test<\/span>(<span class=\"hljs-string\">\"sss\"<\/span>))<span class=\"hljs-comment\">;<\/span>\r\n        System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(isNotEmpty<span class=\"hljs-preprocessor\">.test<\/span>(<span class=\"hljs-string\">\"\"<\/span>))<span class=\"hljs-comment\">;<\/span>\r\n    }<\/code><\/pre>\n<p><strong>\u8fd0\u884c\u7ed3\u679c\uff1a<\/strong><br \/>\ntrue<br \/>\nfalse<br \/>\nfalse<br \/>\ntrue<br \/>\nfalse<br \/>\nfalse<\/p>\n<p><strong>Function \u63a5\u53e3<\/strong><br \/>\nFunction \u63a5\u53e3\u6709\u4e00\u4e2a\u53c2\u6570\u5e76\u4e14\u8fd4\u56de\u4e00\u4e2a\u7ed3\u679c\uff0c\u5e76\u9644\u5e26\u4e86\u4e00\u4e9b\u53ef\u4ee5\u548c\u5176\u4ed6\u51fd\u6570\u7ec4\u5408\u7684\u9ed8\u8ba4\u65b9\u6cd5\uff08compose, andThen\uff09\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">        Function&lt;String, Integer&gt; toInteger = Integer::valueOf<span class=\"hljs-comment\">;<\/span>\r\n        System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(toInteger<span class=\"hljs-preprocessor\">.apply<\/span>(<span class=\"hljs-string\">\"123\"<\/span>)<span class=\"hljs-preprocessor\">.getClass<\/span>())<span class=\"hljs-comment\">;<\/span>\r\n        Function&lt;String, Object&gt; toInteger2 = toInteger<span class=\"hljs-preprocessor\">.andThen<\/span>(String::valueOf)<span class=\"hljs-comment\">;<\/span>\r\n        System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(toInteger2<span class=\"hljs-preprocessor\">.apply<\/span>(<span class=\"hljs-string\">\"123\"<\/span>)<span class=\"hljs-preprocessor\">.getClass<\/span>())<span class=\"hljs-comment\">;<\/span><\/code><\/pre>\n<p>\u8f93\u51fa\uff1a<br \/>\nclass java.lang.Integer<br \/>\nclass java.lang.String<\/p>\n<p><strong>Supplier \u63a5\u53e3<\/strong><br \/>\nSupplier \u63a5\u53e3\u8fd4\u56de\u4e00\u4e2a\u4efb\u610f\u8303\u578b\u7684\u503c\uff0c\u548cFunction\u63a5\u53e3\u4e0d\u540c\u7684\u662f\u8be5\u63a5\u53e3\u6ca1\u6709\u4efb\u4f55\u53c2\u6570<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs cs has-numbering\">Supplier&lt;Person&gt; personSupplier = Person::<span class=\"hljs-keyword\">new<\/span>;\r\npersonSupplier.<span class=\"hljs-keyword\">get<\/span>();   <span class=\"hljs-comment\">\/\/ new Person<\/span><\/code><\/pre>\n<p><strong>Consumer \u63a5\u53e3<\/strong><\/p>\n<p>Consumer \u63a5\u53e3\u8868\u793a\u6267\u884c\u5728\u5355\u4e2a\u53c2\u6570\u4e0a\u7684\u64cd\u4f5c\u3002\u63a5\u53e3\u53ea\u6709\u4e00\u4e2a\u53c2\u6570\uff0c\u4e14\u65e0\u8fd4\u56de\u503c<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">        Supplier&lt;LambdaClassTest&gt; personSupplier = LambdaClassTest::new<span class=\"hljs-comment\">;<\/span>\r\n        Consumer&lt;LambdaClassTest&gt; greeter = (lt) -&gt; System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(<span class=\"hljs-string\">\"Hello, \"<\/span> + lt<span class=\"hljs-preprocessor\">.getTest<\/span>())<span class=\"hljs-comment\">;<\/span>\r\n        greeter<span class=\"hljs-preprocessor\">.accept<\/span>(personSupplier<span class=\"hljs-preprocessor\">.get<\/span>())<span class=\"hljs-comment\">;<\/span><\/code><\/pre>\n<p><strong>Comparator \u63a5\u53e3<\/strong><\/p>\n<p>Comparator \u662f\u8001Java\u4e2d\u7684\u7ecf\u5178\u63a5\u53e3\uff0c Java 8\u5728\u6b64\u4e4b\u4e0a\u6dfb\u52a0\u4e86\u591a\u79cd\u9ed8\u8ba4\u65b9\u6cd5\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">Comparator&lt;Person&gt; comparator = (p1, p2) -&gt; p1<span class=\"hljs-preprocessor\">.firstName<\/span><span class=\"hljs-preprocessor\">.compareTo<\/span>(p2<span class=\"hljs-preprocessor\">.firstName<\/span>)<span class=\"hljs-comment\">;<\/span>\r\nPerson p1 = new Person(<span class=\"hljs-string\">\"John\"<\/span>, <span class=\"hljs-string\">\"Doe\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\nPerson p2 = new Person(<span class=\"hljs-string\">\"Alice\"<\/span>, <span class=\"hljs-string\">\"Wonderland\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\ncomparator<span class=\"hljs-preprocessor\">.compare<\/span>(p1, p2)<span class=\"hljs-comment\">;             \/\/ &gt; 0<\/span>\r\ncomparator<span class=\"hljs-preprocessor\">.reversed<\/span>()<span class=\"hljs-preprocessor\">.compare<\/span>(p1, p2)<span class=\"hljs-comment\">;  \/\/ &lt; 0<\/span><\/code><\/pre>\n<p><strong>Optional \u63a5\u53e3<\/strong><\/p>\n<p>Optional \u4e0d\u662f\u51fd\u6570\u662f\u63a5\u53e3\uff0c\u8fd9\u662f\u4e2a\u7528\u6765\u9632\u6b62NullPointerException\u5f02\u5e38\u7684\u8f85\u52a9\u7c7b\u578b\uff0c\u8fd9\u662f\u4e0b\u4e00\u5c4a\u4e2d\u5c06\u8981\u7528\u5230\u7684\u91cd\u8981\u6982\u5ff5\uff0c\u73b0\u5728\u5148\u7b80\u5355\u7684\u770b\u770b\u8fd9\u4e2a\u63a5\u53e3\u80fd\u5e72\u4ec0\u4e48\uff1a<br \/>\nOptional \u88ab\u5b9a\u4e49\u4e3a\u4e00\u4e2a\u7b80\u5355\u7684\u5bb9\u5668\uff0c\u5176\u503c\u53ef\u80fd\u662fnull\u6216\u8005\u4e0d\u662fnull\u3002\u5728Java 8\u4e4b\u524d\u4e00\u822c\u67d0\u4e2a\u51fd\u6570\u5e94\u8be5\u8fd4\u56de\u975e\u7a7a\u5bf9\u8c61\u4f46\u662f\u5076\u5c14\u5374\u53ef\u80fd\u8fd4\u56de\u4e86null\uff0c\u800c\u5728Java 8\u4e2d\uff0c\u4e0d\u63a8\u8350\u4f60\u8fd4\u56denull\u800c\u662f\u8fd4\u56deOptional\u3002<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs coffeescript has-numbering\">Optional&lt;String&gt; optional = Optional.<span class=\"hljs-keyword\">of<\/span>(<span class=\"hljs-string\">\"bam\"<\/span>);\r\noptional.isPresent();           <span class=\"hljs-regexp\">\/\/<\/span> <span class=\"hljs-literal\">true<\/span>\r\noptional.get();                 <span class=\"hljs-regexp\">\/\/<\/span> <span class=\"hljs-string\">\"bam\"<\/span>\r\noptional.orElse(<span class=\"hljs-string\">\"fallback\"<\/span>);    <span class=\"hljs-regexp\">\/\/<\/span> <span class=\"hljs-string\">\"bam\"<\/span>\r\noptional.ifPresent<span class=\"hljs-function\"><span class=\"hljs-params\">((s) -&gt; System.out.println(s.charAt(<span class=\"hljs-number\">0<\/span>)))<\/span>;     \/\/ \"<span class=\"hljs-title\">b<\/span>\"<\/span><\/code><\/pre>\n<p><strong>Stream \u63a5\u53e3 \u91cd\u8981\uff01\uff01\uff01<\/strong><\/p>\n<p><strong>\u521b\u5efastream\u2013\u901a\u8fc7of\u65b9\u6cd5<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs vbnet has-numbering\">Stream&lt;<span class=\"hljs-built_in\">Integer<\/span>&gt; integerStream = Stream.<span class=\"hljs-keyword\">of<\/span>(<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">5<\/span>);\r\nStream&lt;<span class=\"hljs-built_in\">String<\/span>&gt; stringStream = Stream.<span class=\"hljs-keyword\">of<\/span>(<span class=\"hljs-string\">\"taobao\"<\/span>);<\/code><\/pre>\n<p><strong>\u521b\u5efastream\u2013\u901a\u8fc7generator\u65b9\u6cd5<\/strong><br \/>\n\u751f\u6210\u4e00\u4e2a\u65e0\u9650\u957f\u5ea6\u7684Stream\uff0c\u5176\u5143\u7d20\u7684\u751f\u6210\u662f\u901a\u8fc7\u7ed9\u5b9a\u7684Supplier\uff08\u8fd9\u4e2a\u63a5\u53e3\u53ef\u4ee5\u770b\u6210\u4e00\u4e2a\u5bf9\u8c61\u7684\u5de5\u5382\uff0c\u6bcf\u6b21\u8c03\u7528\u8fd4\u56de\u4e00\u4e2a\u7ed9\u5b9a\u7c7b\u578b\u7684\u5bf9\u8c61\uff09<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs coffeescript has-numbering\">Stream.generate(<span class=\"hljs-keyword\">new<\/span> Supplier&lt;Double&gt;() {\r\n\r\n    <span class=\"hljs-property\">@Override<\/span>\r\n\r\n    public Double get() {\r\n\r\n        <span class=\"hljs-keyword\">return<\/span> Math.random();\r\n\r\n    }\r\n\r\n});\r\n\r\nStream.generate<span class=\"hljs-function\"><span class=\"hljs-params\">(() -&gt; Math.random())<\/span>;\r\n\r\n<span class=\"hljs-title\">Stream<\/span>.<span class=\"hljs-title\">generate<\/span><span class=\"hljs-params\">(Math::random)<\/span>;<\/span><\/code><\/pre>\n<p>\u4e09\u6761\u8bed\u53e5\u7684\u4f5c\u7528\u90fd\u662f\u4e00\u6837\u7684\uff0c\u53ea\u662f\u4f7f\u7528\u4e86lambda\u8868\u8fbe\u5f0f\u548c\u65b9\u6cd5\u5f15\u7528\u7684\u8bed\u6cd5\u6765\u7b80\u5316\u4ee3\u7801\u3002\u6bcf\u6761\u8bed\u53e5\u5176\u5b9e\u90fd\u662f\u751f\u6210\u4e00\u4e2a\u65e0\u9650\u957f\u5ea6\u7684Stream\uff0c\u5176\u4e2d\u503c\u662f\u968f\u673a\u7684\u3002\u8fd9\u4e2a\u65e0\u9650\u957f\u5ea6Stream\u662f\u61d2\u52a0\u8f7d\uff0c\u4e00\u822c\u8fd9\u79cd\u65e0\u9650\u957f\u5ea6\u7684Stream\u90fd\u4f1a\u914d\u5408Stream\u7684limit()\u65b9\u6cd5\u6765\u7528\u3002<\/p>\n<p><strong>\u521b\u5efastream\u2013\u901a\u8fc7iterate\u65b9\u6cd5<\/strong><br \/>\n\u4e5f\u662f\u751f\u6210\u65e0\u9650\u957f\u5ea6\u7684Stream\uff0c\u548cgenerator\u4e0d\u540c\u7684\u662f\uff0c\u5176\u5143\u7d20\u7684\u751f\u6210\u662f\u91cd\u590d\u5bf9\u7ed9\u5b9a\u7684\u79cd\u5b50\u503c(seed)\u8c03\u7528\u7528\u6237\u6307\u5b9a\u51fd\u6570\u6765\u751f\u6210\u7684\u3002\u5176\u4e2d\u5305\u542b\u7684\u5143\u7d20\u53ef\u4ee5\u8ba4\u4e3a\u662f\uff1aseed\uff0cf(seed),f(f(seed))\u65e0\u9650\u5faa\u73af<br \/>\nStream.iterate(1, item -&gt; item + 1).limit(10).forEach(System.out::println);<br \/>\n\u8fd9\u6bb5\u4ee3\u7801\u5c31\u662f\u5148\u83b7\u53d6\u4e00\u4e2a\u65e0\u9650\u957f\u5ea6\u7684\u6b63\u6574\u6570\u96c6\u5408\u7684Stream\uff0c\u7136\u540e\u53d6\u51fa\u524d10\u4e2a\u6253\u5370\u3002\u5343\u4e07\u8bb0\u4f4f\u4f7f\u7528limit\u65b9\u6cd5\uff0c\u4e0d\u7136\u4f1a\u65e0\u9650\u6253\u5370\u4e0b\u53bb\u3002<\/p>\n<p><strong>\u901a\u8fc7Collection\u5b50\u7c7b\u83b7\u53d6Stream<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs php has-numbering\">\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title\">Collection<\/span>&lt;<span class=\"hljs-title\">E<\/span>&gt; <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Iterable<\/span>&lt;<span class=\"hljs-title\">E<\/span>&gt; {<\/span>\r\n\r\n    <span class=\"hljs-comment\">\/\/\u5176\u4ed6\u65b9\u6cd5\u7701\u7565<\/span>\r\n\r\n    <span class=\"hljs-keyword\">default<\/span> Stream&lt;E&gt; stream() {\r\n\r\n        <span class=\"hljs-keyword\">return<\/span> StreamSupport.stream(spliterator(), <span class=\"hljs-keyword\">false<\/span>);\r\n\r\n    }\r\n\r\n}<\/code><\/pre>\n<p>java.util.Stream \u8868\u793a\u80fd\u5e94\u7528\u5728\u4e00\u7ec4\u5143\u7d20\u4e0a\u4e00\u6b21\u6267\u884c\u7684\u64cd\u4f5c\u5e8f\u5217\u3002Stream \u64cd\u4f5c\u5206\u4e3a\u4e2d\u95f4\u64cd\u4f5c\u6216\u8005\u6700\u7ec8\u64cd\u4f5c\u4e24\u79cd\uff0c\u6700\u7ec8\u64cd\u4f5c\u8fd4\u56de\u4e00\u7279\u5b9a\u7c7b\u578b\u7684\u8ba1\u7b97\u7ed3\u679c\uff0c\u800c\u4e2d\u95f4\u64cd\u4f5c\u8fd4\u56deStream\u672c\u8eab\uff0c\u8fd9\u6837\u4f60\u5c31\u53ef\u4ee5\u5c06\u591a\u4e2a\u64cd\u4f5c\u4f9d\u6b21\u4e32\u8d77\u6765\u3002Stream \u7684\u521b\u5efa\u9700\u8981\u6307\u5b9a\u4e00\u4e2a\u6570\u636e\u6e90\uff0c\u6bd4\u5982 java.util.Collection\u7684\u5b50\u7c7b\uff0cList\u6216\u8005Set\uff0c Map\u4e0d\u652f\u6301\u3002Stream\u7684\u64cd\u4f5c\u53ef\u4ee5\u4e32\u884c\u6267\u884c\u6216\u8005\u5e76\u884c\u6267\u884c\u3002<\/p>\n<p>Java 8\u6269\u5c55\u4e86\u96c6\u5408\u7c7b\uff0c\u53ef\u4ee5\u901a\u8fc7 Collection.stream() \u6216\u8005 Collection.parallelStream() \u6765\u521b\u5efa\u4e00\u4e2aStream\u3002<br \/>\nStream\u6709\u4e32\u884c\u548c\u5e76\u884c\u4e24\u79cd\uff0c\u4e32\u884cStream\u4e0a\u7684\u64cd\u4f5c\u662f\u5728\u4e00\u4e2a\u7ebf\u7a0b\u4e2d\u4f9d\u6b21\u5b8c\u6210\uff0c\u800c\u5e76\u884cStream\u5219\u662f\u5728\u591a\u4e2a\u7ebf\u7a0b\u4e0a\u540c\u65f6\u6267\u884c\u3002<\/p>\n<p>\u4e0b\u9762\u7684\u4f8b\u5b50\u5c55\u793a\u4e86\u662f\u5982\u4f55\u901a\u8fc7\u5e76\u884cStream\u6765\u63d0\u5347\u6027\u80fd\uff1a<br \/>\n\u9996\u5148\u6211\u4eec\u521b\u5efa\u4e00\u4e2a\u6ca1\u6709\u91cd\u590d\u5143\u7d20\u7684\u5927\u8868\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs glsl has-numbering\"><span class=\"hljs-keyword\">int<\/span> <span class=\"hljs-built_in\">max<\/span> = <span class=\"hljs-number\">1000000<\/span>;\r\nList&lt;String&gt; values = new ArrayList&lt;&gt;(<span class=\"hljs-built_in\">max<\/span>);\r\n<span class=\"hljs-keyword\">for<\/span> (<span class=\"hljs-keyword\">int<\/span> i = <span class=\"hljs-number\">0<\/span>; i &lt; <span class=\"hljs-built_in\">max<\/span>; i++) {\r\n    UUID uuid = UUID.randomUUID();\r\n    values.add(uuid.toString());\r\n}<\/code><\/pre>\n<p>\u7136\u540e\u6211\u4eec\u8ba1\u7b97\u4e00\u4e0b\u6392\u5e8f\u8fd9\u4e2aStream\u8981\u8017\u65f6\u591a\u4e45\uff0c<br \/>\n<strong>\u4e32\u884c\u6392\u5e8f\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">long t0 = System<span class=\"hljs-preprocessor\">.nanoTime<\/span>()<span class=\"hljs-comment\">;<\/span>\r\nlong count = values<span class=\"hljs-preprocessor\">.stream<\/span>()<span class=\"hljs-preprocessor\">.sorted<\/span>()<span class=\"hljs-preprocessor\">.count<\/span>()<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(count)<span class=\"hljs-comment\">;<\/span>\r\nlong t1 = System<span class=\"hljs-preprocessor\">.nanoTime<\/span>()<span class=\"hljs-comment\">;<\/span>\r\nlong millis = TimeUnit<span class=\"hljs-preprocessor\">.NANOSECONDS<\/span><span class=\"hljs-preprocessor\">.toMillis<\/span>(t1 - t0)<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(String<span class=\"hljs-preprocessor\">.format<\/span>(<span class=\"hljs-string\">\"sequential sort took: %d ms\"<\/span>, millis))<span class=\"hljs-comment\">;<\/span><\/code><\/pre>\n<p>\/\/ \u4e32\u884c\u8017\u65f6: 899 ms<br \/>\n<strong>\u5e76\u884c\u6392\u5e8f\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">long t0 = System<span class=\"hljs-preprocessor\">.nanoTime<\/span>()<span class=\"hljs-comment\">;<\/span>\r\nlong count = values<span class=\"hljs-preprocessor\">.parallelStream<\/span>()<span class=\"hljs-preprocessor\">.sorted<\/span>()<span class=\"hljs-preprocessor\">.count<\/span>()<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(count)<span class=\"hljs-comment\">;<\/span>\r\nlong t1 = System<span class=\"hljs-preprocessor\">.nanoTime<\/span>()<span class=\"hljs-comment\">;<\/span>\r\nlong millis = TimeUnit<span class=\"hljs-preprocessor\">.NANOSECONDS<\/span><span class=\"hljs-preprocessor\">.toMillis<\/span>(t1 - t0)<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(String<span class=\"hljs-preprocessor\">.format<\/span>(<span class=\"hljs-string\">\"parallel sort took: %d ms\"<\/span>, millis))<span class=\"hljs-comment\">;<\/span><\/code><\/pre>\n<p>\/\/ \u5e76\u884c\u6392\u5e8f\u8017\u65f6: 472 ms<br \/>\n\u4e0a\u9762\u4e24\u4e2a\u4ee3\u7801\u51e0\u4e4e\u662f\u4e00\u6837\u7684\uff0c\u4f46\u662f\u5e76\u884c\u7248\u7684\u5feb\u4e8650%\u4e4b\u591a\uff0c\u552f\u4e00\u9700\u8981\u505a\u7684\u6539\u52a8\u5c31\u662f<strong>\u5c06stream()\u6539\u4e3aparallelStream()<\/strong>\uff1b<\/p>\n<p><strong>stream\u7684\u5176\u4ed6\u5e94\u7528\uff1a<\/strong><br \/>\n<strong>1\u3001count()\u3001max()\u3001min()<\/strong>\u65b9\u6cd5<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">import java<span class=\"hljs-preprocessor\">.util<\/span><span class=\"hljs-preprocessor\">.ArrayList<\/span><span class=\"hljs-comment\">;<\/span>\r\nimport java<span class=\"hljs-preprocessor\">.util<\/span><span class=\"hljs-preprocessor\">.List<\/span><span class=\"hljs-comment\">;<\/span>\r\n\r\npublic class Main {\r\n\r\n    public static void main(String[] args) {\r\n        List&lt;Integer&gt; collection = new ArrayList&lt;Integer&gt;()<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">14<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">5<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">43<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">89<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">64<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">112<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">55<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">55<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">58<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        \/\/list\u957f\u5ea6\r\n        System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(collection<span class=\"hljs-preprocessor\">.parallelStream<\/span>()<span class=\"hljs-preprocessor\">.count<\/span>())<span class=\"hljs-comment\">;<\/span>\r\n\r\n        \/\/\u6c42\u6700\u5927\u503c,\u8fd4\u56deOption,\u901a\u8fc7Option<span class=\"hljs-preprocessor\">.get<\/span>()\u83b7\u53d6\u503c\r\n        System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(collection<span class=\"hljs-preprocessor\">.parallelStream<\/span>()<span class=\"hljs-preprocessor\">.max<\/span>((a,b)-&gt;{return a-b<span class=\"hljs-comment\">;}).get());<\/span>\r\n\r\n        \/\/\u6c42\u6700\u5c0f\u503c,\u8fd4\u56deOption,\u901a\u8fc7Option<span class=\"hljs-preprocessor\">.get<\/span>()\u83b7\u53d6\u503c\r\n        System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(collection<span class=\"hljs-preprocessor\">.parallelStream<\/span>()<span class=\"hljs-preprocessor\">.min<\/span>((a,b)-&gt;{return a-b<span class=\"hljs-comment\">;}).get());<\/span>\r\n\r\n    }\r\n}<\/code><\/pre>\n<p><strong>2\u3001Filter \u8fc7\u6ee4\u65b9\u6cd5<\/strong><br \/>\n\u8fc7\u6ee4\u901a\u8fc7\u4e00\u4e2apredicate\u63a5\u53e3\u6765\u8fc7\u6ee4\u5e76\u53ea\u4fdd\u7559\u7b26\u5408\u6761\u4ef6\u7684\u5143\u7d20\uff0c\u8be5\u64cd\u4f5c\u5c5e\u4e8e\u4e2d\u95f4\u64cd\u4f5c\u3002<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">import java<span class=\"hljs-preprocessor\">.util<\/span><span class=\"hljs-preprocessor\">.ArrayList<\/span><span class=\"hljs-comment\">;<\/span>\r\nimport java<span class=\"hljs-preprocessor\">.util<\/span><span class=\"hljs-preprocessor\">.List<\/span><span class=\"hljs-comment\">;<\/span>\r\n\r\npublic class Main {\r\n\r\n    public static void main(String[] args) {\r\n        List&lt;Integer&gt; collection = new ArrayList&lt;Integer&gt;()<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">14<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">5<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">43<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">89<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">64<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">112<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">55<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">55<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">58<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        Long count =collection<span class=\"hljs-preprocessor\">.stream<\/span>()<span class=\"hljs-preprocessor\">.filter<\/span>(num -&gt; num!=null).\r\n                filter(num -&gt; num<span class=\"hljs-preprocessor\">.intValue<\/span>()&gt;<span class=\"hljs-number\">50<\/span>)<span class=\"hljs-preprocessor\">.count<\/span>()<span class=\"hljs-comment\">;<\/span>\r\n        System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(count)<span class=\"hljs-comment\">;<\/span>\r\n    }\r\n}<\/code><\/pre>\n<p><strong>3\u3001distinct\u65b9\u6cd5<\/strong><br \/>\n\u53bb\u9664\u91cd\u590d<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">import java<span class=\"hljs-preprocessor\">.util<\/span><span class=\"hljs-preprocessor\">.ArrayList<\/span><span class=\"hljs-comment\">;<\/span>\r\nimport java<span class=\"hljs-preprocessor\">.util<\/span><span class=\"hljs-preprocessor\">.List<\/span><span class=\"hljs-comment\">;<\/span>\r\n\r\npublic class Main {\r\n\r\n    public static void main(String[] args) {\r\n        List&lt;Integer&gt; collection = new ArrayList&lt;Integer&gt;()<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">14<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">5<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">43<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">89<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">64<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">112<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">55<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">55<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-number\">58<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.stream<\/span>()<span class=\"hljs-preprocessor\">.distinct<\/span>()<span class=\"hljs-preprocessor\">.forEach<\/span>(System<span class=\"hljs-preprocessor\">.out<\/span>::println)<span class=\"hljs-comment\">;;<\/span>\r\n    }\r\n}<\/code><\/pre>\n<p><strong>4\u3001Sort \u6392\u5e8f<\/strong><br \/>\n\u6392\u5e8f\u662f\u4e00\u4e2a\u4e2d\u95f4\u64cd\u4f5c\uff0c\u8fd4\u56de\u7684\u662f\u6392\u5e8f\u597d\u540e\u7684Stream\u3002\u5982\u679c\u4f60\u4e0d\u6307\u5b9a\u4e00\u4e2a\u81ea\u5b9a\u4e49\u7684Comparator\u5219\u4f1a\u4f7f\u7528\u9ed8\u8ba4\u6392\u5e8f\u3002<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">stringCollection\r\n    <span class=\"hljs-preprocessor\">.stream<\/span>()\r\n    <span class=\"hljs-preprocessor\">.sorted<\/span>()\r\n    <span class=\"hljs-preprocessor\">.filter<\/span>((s) -&gt; s<span class=\"hljs-preprocessor\">.startsWith<\/span>(<span class=\"hljs-string\">\"a\"<\/span>))\r\n    <span class=\"hljs-preprocessor\">.forEach<\/span>(System<span class=\"hljs-preprocessor\">.out<\/span>::println)<span class=\"hljs-comment\">;<\/span>\r\n\/\/ <span class=\"hljs-string\">\"aaa1\"<\/span>, <span class=\"hljs-string\">\"aaa2\"<\/span><\/code><\/pre>\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u6392\u5e8f\u53ea\u521b\u5efa\u4e86\u4e00\u4e2a\u6392\u5217\u597d\u540e\u7684Stream\uff0c\u800c\u4e0d\u4f1a\u5f71\u54cd\u539f\u6709\u7684\u6570\u636e\u6e90\uff0c\u6392\u5e8f\u4e4b\u540e\u539f\u6570\u636estringCollection\u662f\u4e0d\u4f1a\u88ab\u4fee\u6539\u7684\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs cs has-numbering\">System.<span class=\"hljs-keyword\">out<\/span>.println(stringCollection);\r\n<span class=\"hljs-comment\">\/\/ ddd2, aaa2, bbb1, aaa1, bbb3, ccc, bbb2, ddd1<\/span><\/code><\/pre>\n<p><strong>5\u3001Map \u6620\u5c04<\/strong><\/p>\n<p>\u5bf9\u4e8eStream\u4e2d\u5305\u542b\u7684\u5143\u7d20\u4f7f\u7528\u7ed9\u5b9a\u7684\u8f6c\u6362\u51fd\u6570\u8fdb\u884c\u8f6c\u6362\u64cd\u4f5c\uff0c\u65b0\u751f\u6210\u7684Stream\u53ea\u5305\u542b\u8f6c\u6362\u751f\u6210\u7684\u5143\u7d20\u3002\u8fd9\u4e2a\u65b9\u6cd5\u6709\u4e09\u4e2a\u5bf9\u4e8e\u539f\u59cb\u7c7b\u578b\u7684\u53d8\u79cd\u65b9\u6cd5\uff0c\u5206\u522b\u662f\uff1amapToInt\uff0cmapToLong\u548cmapToDouble\u3002\u8fd9\u4e09\u4e2a\u65b9\u6cd5\u4e5f\u6bd4\u8f83\u597d\u7406\u89e3\uff0c\u6bd4\u5982mapToInt\u5c31\u662f\u628a\u539f\u59cbStream\u8f6c\u6362\u6210\u4e00\u4e2a\u65b0\u7684Stream\uff0c\u8fd9\u4e2a\u65b0\u751f\u6210\u7684Stream\u4e2d\u7684\u5143\u7d20\u90fd\u662fint\u7c7b\u578b\u3002\u4e4b\u6240\u4ee5\u4f1a\u6709\u8fd9\u6837\u4e09\u4e2a\u53d8\u79cd\u65b9\u6cd5\uff0c\u53ef\u4ee5\u514d\u9664\u81ea\u52a8\u88c5\u7bb1\/\u62c6\u7bb1\u7684\u989d\u5916\u6d88\u8017\uff1b<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">import java<span class=\"hljs-preprocessor\">.util<\/span><span class=\"hljs-preprocessor\">.ArrayList<\/span><span class=\"hljs-comment\">;<\/span>\r\nimport java<span class=\"hljs-preprocessor\">.util<\/span><span class=\"hljs-preprocessor\">.List<\/span><span class=\"hljs-comment\">;<\/span>\r\n\r\npublic class Main {\r\n\r\n    public static void main(String[] args) {\r\n        List&lt;String&gt; collection = new ArrayList&lt;String&gt;()<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-string\">\"14\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-string\">\"5\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-string\">\"43\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-string\">\"89\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-string\">\"64\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-string\">\"112\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-string\">\"55\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-string\">\"55\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        collection<span class=\"hljs-preprocessor\">.add<\/span>(<span class=\"hljs-string\">\"58\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n        \/\/\u5c06String\u8f6c\u5316\u4e3aInteger\u7c7b\u578b\r\n        collection<span class=\"hljs-preprocessor\">.stream<\/span>()<span class=\"hljs-preprocessor\">.mapToInt<\/span>(Integer::valueOf)<span class=\"hljs-preprocessor\">.forEach<\/span>(System<span class=\"hljs-preprocessor\">.out<\/span>::println)<span class=\"hljs-comment\">;<\/span>\r\n        \/\/\u6216\r\n        collection<span class=\"hljs-preprocessor\">.stream<\/span>()<span class=\"hljs-preprocessor\">.mapToInt<\/span>(a-&gt;Integer<span class=\"hljs-preprocessor\">.parseInt<\/span>(a))<span class=\"hljs-preprocessor\">.forEach<\/span>(System<span class=\"hljs-preprocessor\">.out<\/span>::println)<span class=\"hljs-comment\">;<\/span>\r\n    }\r\n}\r\n\r\n\u4e5f\u53ef\u4ee5\u8fd9\u6837\u7528\uff1a\r\nList&lt;Integer&gt; nums = Lists<span class=\"hljs-preprocessor\">.newArrayList<\/span>(<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,null,<span class=\"hljs-number\">2<\/span>,<span class=\"hljs-number\">3<\/span>,<span class=\"hljs-number\">4<\/span>,null,<span class=\"hljs-number\">5<\/span>,<span class=\"hljs-number\">6<\/span>,<span class=\"hljs-number\">7<\/span>,<span class=\"hljs-number\">8<\/span>,<span class=\"hljs-number\">9<\/span>,<span class=\"hljs-number\">10<\/span>)<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(\u201csum is:\u201d+nums<span class=\"hljs-preprocessor\">.stream<\/span>()<span class=\"hljs-preprocessor\">.filter<\/span>(num -&gt; num != null)<span class=\"hljs-preprocessor\">.distinct<\/span>()<span class=\"hljs-preprocessor\">.mapToInt<\/span>(num -&gt; num * <span class=\"hljs-number\">2<\/span>).\r\n            peek(System<span class=\"hljs-preprocessor\">.out<\/span>::println)<span class=\"hljs-preprocessor\">.skip<\/span>(<span class=\"hljs-number\">2<\/span>)<span class=\"hljs-preprocessor\">.limit<\/span>(<span class=\"hljs-number\">4<\/span>)<span class=\"hljs-preprocessor\">.sum<\/span>())<span class=\"hljs-comment\">;<\/span><\/code><\/pre>\n<p><strong>7\u3001limit\uff1a<\/strong><br \/>\n\u5bf9\u4e00\u4e2aStream\u8fdb\u884c\u622a\u65ad\u64cd\u4f5c\uff0c\u83b7\u53d6\u5176\u524dN\u4e2a\u5143\u7d20\uff0c\u5982\u679c\u539fStream\u4e2d\u5305\u542b\u7684\u5143\u7d20\u4e2a\u6570\u5c0f\u4e8eN\uff0c\u90a3\u5c31\u83b7\u53d6\u5176\u6240\u6709\u7684\u5143\u7d20\uff1b<\/p>\n<p><strong>8\u3001skip\uff1a<\/strong><br \/>\n\u8fd4\u56de\u4e00\u4e2a\u4e22\u5f03\u539fStream\u7684\u524dN\u4e2a\u5143\u7d20\u540e\u5269\u4e0b\u5143\u7d20\u7ec4\u6210\u7684\u65b0Stream\uff0c\u5982\u679c\u539fStream\u4e2d\u5305\u542b\u7684\u5143\u7d20\u4e2a\u6570\u5c0f\u4e8eN\uff0c\u90a3\u4e48\u8fd4\u56de\u7a7aStream\uff1b<\/p>\n<p><strong>9\u3001Match \u5339\u914d<\/strong><br \/>\nStream\u63d0\u4f9b\u4e86\u591a\u79cd\u5339\u914d\u64cd\u4f5c\uff0c\u5141\u8bb8\u68c0\u6d4b\u6307\u5b9a\u7684Predicate\u662f\u5426\u5339\u914d\u6574\u4e2aStream\u3002\u6240\u6709\u7684\u5339\u914d\u64cd\u4f5c\u90fd\u662f\u6700\u7ec8\u64cd\u4f5c\uff0c\u5e76\u8fd4\u56de\u4e00\u4e2aboolean\u7c7b\u578b\u7684\u503c\u3002<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs coffeescript has-numbering\">boolean anyStartsWithA = \r\n    stringCollection\r\n        .stream()\r\n        .anyMatch<span class=\"hljs-function\"><span class=\"hljs-params\">((s) -&gt; s.startsWith(<span class=\"hljs-string\">\"a\"<\/span>))<\/span>;\r\n<span class=\"hljs-title\">System<\/span>.<span class=\"hljs-title\">out<\/span>.<span class=\"hljs-title\">println<\/span><span class=\"hljs-params\">(anyStartsWithA)<\/span>;      \/\/ <span class=\"hljs-title\">true<\/span>\r\n<span class=\"hljs-title\">boolean<\/span> <span class=\"hljs-title\">allStartsWithA<\/span> = \r\n    <span class=\"hljs-title\">stringCollection<\/span>\r\n        .<span class=\"hljs-title\">stream<\/span><span class=\"hljs-params\">()<\/span>\r\n        .<span class=\"hljs-title\">allMatch<\/span><span class=\"hljs-params\">((s) -&gt; s.startsWith(<span class=\"hljs-string\">\"a\"<\/span>))<\/span>;\r\n<span class=\"hljs-title\">System<\/span>.<span class=\"hljs-title\">out<\/span>.<span class=\"hljs-title\">println<\/span><span class=\"hljs-params\">(allStartsWithA)<\/span>;      \/\/ <span class=\"hljs-title\">false<\/span>\r\n<span class=\"hljs-title\">boolean<\/span> <span class=\"hljs-title\">noneStartsWithZ<\/span> = \r\n    <span class=\"hljs-title\">stringCollection<\/span>\r\n        .<span class=\"hljs-title\">stream<\/span><span class=\"hljs-params\">()<\/span>\r\n        .<span class=\"hljs-title\">noneMatch<\/span><span class=\"hljs-params\">((s) -&gt; s.startsWith(<span class=\"hljs-string\">\"z\"<\/span>))<\/span>;\r\n<span class=\"hljs-title\">System<\/span>.<span class=\"hljs-title\">out<\/span>.<span class=\"hljs-title\">println<\/span><span class=\"hljs-params\">(noneStartsWithZ)<\/span>;      \/\/ <span class=\"hljs-title\">true<\/span><\/span><\/code><\/pre>\n<p><strong>10\u3001Count \u8ba1\u6570<\/strong><\/p>\n<p>\u8ba1\u6570\u662f\u4e00\u4e2a\u6700\u7ec8\u64cd\u4f5c\uff0c\u8fd4\u56deStream\u4e2d\u5143\u7d20\u7684\u4e2a\u6570\uff0c\u8fd4\u56de\u503c\u7c7b\u578b\u662flong\u3002<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs coffeescript has-numbering\">long startsWithB = \r\n    stringCollection\r\n        .stream()\r\n        .filter<span class=\"hljs-function\"><span class=\"hljs-params\">((s) -&gt; s.startsWith(<span class=\"hljs-string\">\"b\"<\/span>))<\/span>\r\n        .<span class=\"hljs-title\">count<\/span><span class=\"hljs-params\">()<\/span>;\r\n<span class=\"hljs-title\">System<\/span>.<span class=\"hljs-title\">out<\/span>.<span class=\"hljs-title\">println<\/span><span class=\"hljs-params\">(startsWithB)<\/span>;    \/\/ 3<\/span><\/code><\/pre>\n<p><strong>11\u3001Reduce \u89c4\u7ea6<\/strong><br \/>\n\u8fd9\u662f\u4e00\u4e2a\u6700\u7ec8\u64cd\u4f5c\uff0c\u5141\u8bb8\u901a\u8fc7\u6307\u5b9a\u7684\u51fd\u6570\u6765\u8bb2stream\u4e2d\u7684\u591a\u4e2a\u5143\u7d20\u89c4\u7ea6\u4e3a\u4e00\u4e2a\u5143\u7d20\uff0c\u89c4\u8d8a\u540e\u7684\u7ed3\u679c\u662f\u901a\u8fc7Optional\u63a5\u53e3\u8868\u793a\u7684\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">Optional&lt;String&gt; reduced =\r\n    stringCollection\r\n        <span class=\"hljs-preprocessor\">.stream<\/span>()\r\n        <span class=\"hljs-preprocessor\">.sorted<\/span>()\r\n        <span class=\"hljs-preprocessor\">.reduce<\/span>((s1, s2) -&gt; s1 + <span class=\"hljs-string\">\"#\"<\/span> + s2)<span class=\"hljs-comment\">;<\/span>\r\nreduced<span class=\"hljs-preprocessor\">.ifPresent<\/span>(System<span class=\"hljs-preprocessor\">.out<\/span>::println)<span class=\"hljs-comment\">;<\/span>\r\n\/\/ <span class=\"hljs-string\">\"aaa1#aaa2#bbb1#bbb2#bbb3#ccc#ddd1#ddd2\"<\/span><\/code><\/pre>\n<p><strong>Map<\/strong><br \/>\n\u524d\u9762\u63d0\u5230\u8fc7\uff0cMap\u7c7b\u578b\u4e0d\u652f\u6301stream\uff0c\u4e0d\u8fc7Map\u63d0\u4f9b\u4e86\u4e00\u4e9b\u65b0\u7684\u6709\u7528\u7684\u65b9\u6cd5\u6765\u5904\u7406\u4e00\u4e9b\u65e5\u5e38\u4efb\u52a1\u3002<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs lasso has-numbering\"><span class=\"hljs-built_in\">Map<\/span><span class=\"hljs-subst\">&lt;<\/span><span class=\"hljs-built_in\">Integer<\/span>, <span class=\"hljs-built_in\">String<\/span><span class=\"hljs-subst\">&gt;<\/span> <span class=\"hljs-built_in\">map<\/span> <span class=\"hljs-subst\">=<\/span> <span class=\"hljs-literal\">new<\/span> HashMap<span class=\"hljs-subst\">&lt;&gt;<\/span>();\r\nfor (int i <span class=\"hljs-subst\">=<\/span> <span class=\"hljs-number\">0<\/span>; i <span class=\"hljs-subst\">&lt;<\/span> <span class=\"hljs-number\">10<\/span>; i<span class=\"hljs-subst\">++<\/span>) {\r\n    <span class=\"hljs-built_in\">map<\/span><span class=\"hljs-built_in\">.<\/span>putIfAbsent(i, <span class=\"hljs-string\">\"val\"<\/span> <span class=\"hljs-subst\">+<\/span> i);\r\n}\r\n<span class=\"hljs-built_in\">map<\/span><span class=\"hljs-built_in\">.<\/span>forEach((id, val) <span class=\"hljs-subst\">-&gt; <\/span>System<span class=\"hljs-built_in\">.<\/span>out<span class=\"hljs-built_in\">.<\/span>println(val));<\/code><\/pre>\n<p>\u4ee5\u4e0a\u4ee3\u7801\u5f88\u5bb9\u6613\u7406\u89e3\uff0c putIfAbsent \u4e0d\u9700\u8981\u6211\u4eec\u505a\u989d\u5916\u7684\u5b58\u5728\u6027\u68c0\u67e5\uff0c\u800cforEach\u5219\u63a5\u6536\u4e00\u4e2aConsumer\u63a5\u53e3\u6765\u5bf9map\u91cc\u7684\u6bcf\u4e00\u4e2a\u952e\u503c\u5bf9\u8fdb\u884c\u64cd\u4f5c\u3002<br \/>\n\u4e0b\u9762\u7684\u4f8b\u5b50\u5c55\u793a\u4e86map\u4e0a\u7684\u5176\u4ed6\u6709\u7528\u7684\u51fd\u6570\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs coffeescript has-numbering\">map.computeIfPresent<span class=\"hljs-function\"><span class=\"hljs-params\">(<span class=\"hljs-number\">3<\/span>, (num, val) -&gt; val + num)<\/span>;\r\n<span class=\"hljs-title\">map<\/span>.<span class=\"hljs-title\">get<\/span><span class=\"hljs-params\">(<span class=\"hljs-number\">3<\/span>)<\/span>;             \/\/ <span class=\"hljs-title\">val33<\/span>\r\n<span class=\"hljs-title\">map<\/span>.<span class=\"hljs-title\">computeIfPresent<\/span><span class=\"hljs-params\">(<span class=\"hljs-number\">9<\/span>, (num, val) -&gt; <span class=\"hljs-literal\">null<\/span>)<\/span>;\r\n<span class=\"hljs-title\">map<\/span>.<span class=\"hljs-title\">containsKey<\/span><span class=\"hljs-params\">(<span class=\"hljs-number\">9<\/span>)<\/span>;     \/\/ <span class=\"hljs-title\">false<\/span>\r\n<span class=\"hljs-title\">map<\/span>.<span class=\"hljs-title\">computeIfAbsent<\/span><span class=\"hljs-params\">(<span class=\"hljs-number\">23<\/span>, num -&gt; <span class=\"hljs-string\">\"val\"<\/span> + num)<\/span>;\r\n<span class=\"hljs-title\">map<\/span>.<span class=\"hljs-title\">containsKey<\/span><span class=\"hljs-params\">(<span class=\"hljs-number\">23<\/span>)<\/span>;    \/\/ <span class=\"hljs-title\">true<\/span>\r\n<span class=\"hljs-title\">map<\/span>.<span class=\"hljs-title\">computeIfAbsent<\/span><span class=\"hljs-params\">(<span class=\"hljs-number\">3<\/span>, num -&gt; <span class=\"hljs-string\">\"bam\"<\/span>)<\/span>;\r\n<span class=\"hljs-title\">map<\/span>.<span class=\"hljs-title\">get<\/span><span class=\"hljs-params\">(<span class=\"hljs-number\">3<\/span>)<\/span>;             \/\/ <span class=\"hljs-title\">val33<\/span><\/span><\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\u5c55\u793a\u5982\u4f55\u5728Map\u91cc\u5220\u9664\u4e00\u4e2a\u952e\u503c\u5168\u90fd\u5339\u914d\u7684\u9879\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs lasso has-numbering\"><span class=\"hljs-built_in\">map<\/span><span class=\"hljs-built_in\">.<\/span>remove(<span class=\"hljs-number\">3<\/span>, <span class=\"hljs-string\">\"val3\"<\/span>);\r\n<span class=\"hljs-built_in\">map<\/span><span class=\"hljs-built_in\">.<\/span>get(<span class=\"hljs-number\">3<\/span>);             <span class=\"hljs-comment\">\/\/ val33<\/span>\r\n<span class=\"hljs-built_in\">map<\/span><span class=\"hljs-built_in\">.<\/span>remove(<span class=\"hljs-number\">3<\/span>, <span class=\"hljs-string\">\"val33\"<\/span>);\r\n<span class=\"hljs-built_in\">map<\/span><span class=\"hljs-built_in\">.<\/span>get(<span class=\"hljs-number\">3<\/span>);             <span class=\"hljs-comment\">\/\/ null<\/span><\/code><\/pre>\n<p>\u53e6\u5916\u4e00\u4e2a\u6709\u7528\u7684\u65b9\u6cd5\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs ruby has-numbering\">map.getOrDefault(<span class=\"hljs-number\">42<\/span>, <span class=\"hljs-string\">\"not found\"<\/span>);  <span class=\"hljs-regexp\">\/\/<\/span> <span class=\"hljs-keyword\">not<\/span> found<\/code><\/pre>\n<p>\u5bf9Map\u7684\u5143\u7d20\u505a\u5408\u5e76\u4e5f\u53d8\u5f97\u5f88\u5bb9\u6613\u4e86\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs coffeescript has-numbering\">map.merge<span class=\"hljs-function\"><span class=\"hljs-params\">(<span class=\"hljs-number\">9<\/span>, <span class=\"hljs-string\">\"val9\"<\/span>, (value, newValue) -&gt; value.concat(newValue))<\/span>;\r\n<span class=\"hljs-title\">map<\/span>.<span class=\"hljs-title\">get<\/span><span class=\"hljs-params\">(<span class=\"hljs-number\">9<\/span>)<\/span>;             \/\/ <span class=\"hljs-title\">val9<\/span>\r\n<span class=\"hljs-title\">map<\/span>.<span class=\"hljs-title\">merge<\/span><span class=\"hljs-params\">(<span class=\"hljs-number\">9<\/span>, <span class=\"hljs-string\">\"concat\"<\/span>, (value, newValue) -&gt; value.concat(newValue))<\/span>;\r\n<span class=\"hljs-title\">map<\/span>.<span class=\"hljs-title\">get<\/span><span class=\"hljs-params\">(<span class=\"hljs-number\">9<\/span>)<\/span>;             \/\/ <span class=\"hljs-title\">val9concat<\/span><\/span><\/code><\/pre>\n<p>Merge\u505a\u7684\u4e8b\u60c5\u662f\u5982\u679c\u952e\u540d\u4e0d\u5b58\u5728\u5219\u63d2\u5165\uff0c\u5426\u5219\u5219\u5bf9\u539f\u952e\u5bf9\u5e94\u7684\u503c\u505a\u5408\u5e76\u64cd\u4f5c\u5e76\u91cd\u65b0\u63d2\u5165\u5230map\u4e2d\u3002<\/p>\n<p><strong>steam\u5728\u5b9e\u9645\u9879\u76ee\u4e2d\u4f7f\u7528\u7684\u4ee3\u7801\u7247\u6bb5\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs coffeescript has-numbering\"><span class=\"hljs-regexp\">\/\/<\/span><span class=\"hljs-number\">1<\/span>\u3001\u6709list\u96c6\u5408\u751f\u6210\u4ee5productId\u4e3akey\u503c\u5f97map\u96c6\u5408\r\nMap&lt;String, List&lt;CartManager&gt;&gt; cartManagerGroup =\r\n        carts.stream().collect(\r\n                Collectors.groupingBy(<span class=\"hljs-attribute\">CartManager<\/span>::getProductId)\r\n        );\r\n<span class=\"hljs-regexp\">\/\/<\/span><span class=\"hljs-number\">2<\/span>\u3001\u53d6\u5f97\u8d2d\u7269\u8f66\u4e2d\u6570\u91cf\u4e4b\u548c\r\nIntStream  <span class=\"hljs-keyword\">is<\/span> = list.stream<span class=\"hljs-function\"><span class=\"hljs-params\">()<\/span>.<span class=\"hljs-title\">mapToInt<\/span><span class=\"hljs-params\">((CartManager c)-&gt;c.getQuantity())<\/span>; \r\n<span class=\"hljs-title\">is<\/span>.<span class=\"hljs-title\">sum<\/span><span class=\"hljs-params\">()<\/span>;\/\/\u6570\u91cf\u4e4b\u548c\r\n\r\n\/\/3\u3001\u6240\u6709\u8ba2\u5355\u4e2d\u5546\u54c1\u6570\u91cf*\u8ba2\u5355\u91d1\u989d\u6c42\u548c\r\n<span class=\"hljs-title\">orderDetailsNew<\/span>.<span class=\"hljs-title\">parallelStream<\/span><span class=\"hljs-params\">()<\/span>\r\n                            .<span class=\"hljs-title\">mapToDouble<\/span><span class=\"hljs-params\">(orderDetailMid -&gt; orderDetailMid.getQuantity()*orderDetailMid.getFinalPrice())<\/span>.<span class=\"hljs-title\">sum<\/span><span class=\"hljs-params\">()<\/span>\r\n\r\n\/\/4\u3001\u8fc7\u6ee4\u51fa\u6307\u5b9a\u7c7b\u578b\u7684\u8ba2\u5355\uff0c\u5e76\u751f\u6210\u65b0\u7684\u96c6\u5408\r\n<span class=\"hljs-title\">orderDetails<\/span>.<span class=\"hljs-title\">stream<\/span><span class=\"hljs-params\">()<\/span>.\r\n    <span class=\"hljs-title\">filter<\/span><span class=\"hljs-params\">(orderDetail -&gt;    StringUtil.isEmpty(orderDetail.getPromotionsType())|| !orderDetail.getPromotionsType().equals(PromotionTypeEnum.ORDERGIFTPROMOTION.getType()))<\/span>.<span class=\"hljs-title\">collect<\/span><span class=\"hljs-params\">(Collectors.toList())<\/span>;\r\n\r\n\/\/5\u3001\u8fc7\u6ee4\u8d2d\u7269\u8f66\u672a\u88ab\u9009\u4e2d\u5546\u54c1\u5e76\u751f\u6210\u65b0\u7684<span class=\"hljs-title\">list<\/span>\r\n<span class=\"hljs-title\">carts<\/span>.<span class=\"hljs-title\">stream<\/span><span class=\"hljs-params\">()<\/span>.<span class=\"hljs-title\">filter<\/span><span class=\"hljs-params\">(cart -&gt; cart.getSelectFlag()==<span class=\"hljs-number\">1<\/span>)<\/span>.<span class=\"hljs-title\">collect<\/span><span class=\"hljs-params\">(Collectors.toList())<\/span>;\r\n\r\n\/\/6\u3001\u5c06<span class=\"hljs-title\">list<\/span>\u4ee5\u5546\u54c1\u4fc3\u9500\u59d4<span class=\"hljs-title\">key<\/span>\u8f6c\u5316\u4e3a<span class=\"hljs-title\">map<\/span>\r\n<span class=\"hljs-title\">Map<\/span>&lt;<span class=\"hljs-title\">String<\/span>,<span class=\"hljs-title\">List<\/span>&lt;<span class=\"hljs-title\">PromotionsGiftProduct<\/span>&gt;&gt; <span class=\"hljs-title\">map<\/span> = \r\n                <span class=\"hljs-title\">promotionsGiftProducts<\/span>.<span class=\"hljs-title\">stream<\/span><span class=\"hljs-params\">()<\/span>.<span class=\"hljs-title\">collect<\/span><span class=\"hljs-params\">(                    Collectors.groupingBy(PromotionsGiftProduct::getPromotionId))<\/span>;\r\n\r\n\/\/7\u3001\u4ece<span class=\"hljs-title\">list<\/span>&lt;<span class=\"hljs-title\">Cart<\/span>&gt;\u4e2d\u5206\u79bb\u51fa\u53ea\u5b58\u50a8<span class=\"hljs-title\">productId<\/span>\u7684\u5217\u8868<span class=\"hljs-title\">list<\/span>&lt;<span class=\"hljs-title\">String<\/span>&gt;\r\n<span class=\"hljs-title\">List<\/span>&lt;<span class=\"hljs-title\">String<\/span>&gt; <span class=\"hljs-title\">productIds<\/span> = <span class=\"hljs-title\">needUpdate<\/span>.<span class=\"hljs-title\">parallelStream<\/span><span class=\"hljs-params\">()<\/span>\r\n                        .<span class=\"hljs-title\">map<\/span><span class=\"hljs-params\">(CartManager::getProductId)<\/span>\r\n                        .<span class=\"hljs-title\">collect<\/span><span class=\"hljs-params\">(Collectors.toList())<\/span>;<\/span><\/code><\/pre>\n<h2 id=\"\u4e5ddate-api\"><a target=\"_blank\" name=\"t7\"><\/a>\u4e5d\u3001Date API<\/h2>\n<p>Java 8 \u5728\u5305java.time\u4e0b\u5305\u542b\u4e86\u4e00\u7ec4\u5168\u65b0\u7684\u65f6\u95f4\u65e5\u671fAPI\u3002<br \/>\n<strong>Clock \u65f6\u949f<\/strong><br \/>\nClock\u7c7b\u63d0\u4f9b\u4e86\u8bbf\u95ee\u5f53\u524d\u65e5\u671f\u548c\u65f6\u95f4\u7684\u65b9\u6cd5\uff0cClock\u662f\u65f6\u533a\u654f\u611f\u7684\uff0c\u53ef\u4ee5\u7528\u6765\u53d6\u4ee3 System.currentTimeMillis() \u6765\u83b7\u53d6\u5f53\u524d\u7684\u5fae\u79d2\u6570\u3002\u67d0\u4e00\u4e2a\u7279\u5b9a\u7684\u65f6\u95f4\u70b9\u4e5f\u53ef\u4ee5\u4f7f\u7528Instant\u7c7b\u6765\u8868\u793a\uff0cInstant\u7c7b\u4e5f\u53ef\u4ee5\u7528\u6765\u521b\u5efa\u8001\u7684java.util.Date\u5bf9\u8c61\u3002<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs mathematica has-numbering\"><span class=\"hljs-keyword\">Clock<\/span> clock = <span class=\"hljs-keyword\">Clock<\/span>.systemDefaultZone();\r\nlong millis = clock.millis();\r\nInstant instant = clock.instant();\r\n<span class=\"hljs-keyword\">Date<\/span> legacyDate = <span class=\"hljs-keyword\">Date<\/span>.from(instant);   \/\/ legacy java.util.<span class=\"hljs-keyword\">Date<\/span><\/code><\/pre>\n<p><strong>Timezones \u65f6\u533a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">System<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(ZoneId<span class=\"hljs-preprocessor\">.getAvailableZoneIds<\/span>())<span class=\"hljs-comment\">;<\/span>\r\n\/\/ prints all available timezone ids\r\nZoneId zone1 = ZoneId<span class=\"hljs-preprocessor\">.of<\/span>(<span class=\"hljs-string\">\"Europe\/Berlin\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\nZoneId zone2 = ZoneId<span class=\"hljs-preprocessor\">.of<\/span>(<span class=\"hljs-string\">\"Brazil\/East\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(zone1<span class=\"hljs-preprocessor\">.getRules<\/span>())<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(zone2<span class=\"hljs-preprocessor\">.getRules<\/span>())<span class=\"hljs-comment\">;<\/span>\r\n\/\/ ZoneRules[currentStandardOffset=+<span class=\"hljs-number\">01<\/span>:<span class=\"hljs-number\">00<\/span>]\r\n\/\/ ZoneRules[currentStandardOffset=-<span class=\"hljs-number\">03<\/span>:<span class=\"hljs-number\">00<\/span>]<\/code><\/pre>\n<p><strong>LocalTime \u672c\u5730\u65f6\u95f4<\/strong><br \/>\nLocalTime \u5b9a\u4e49\u4e86\u4e00\u4e2a\u6ca1\u6709\u65f6\u533a\u4fe1\u606f\u7684\u65f6\u95f4\uff0c\u4f8b\u5982 \u665a\u4e0a10\u70b9\uff0c\u6216\u8005 17:30:15\u3002\u4e0b\u9762\u7684\u4f8b\u5b50\u4f7f\u7528\u524d\u9762\u4ee3\u7801\u521b\u5efa\u7684\u65f6\u533a\u521b\u5efa\u4e86\u4e24\u4e2a\u672c\u5730\u65f6\u95f4\u3002\u4e4b\u540e\u6bd4\u8f83\u65f6\u95f4\u5e76\u4ee5\u5c0f\u65f6\u548c\u5206\u949f\u4e3a\u5355\u4f4d\u8ba1\u7b97\u4e24\u4e2a\u65f6\u95f4\u7684\u65f6\u95f4\u5dee\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">LocalTime now1 = LocalTime<span class=\"hljs-preprocessor\">.now<\/span>(zone1)<span class=\"hljs-comment\">;<\/span>\r\nLocalTime now2 = LocalTime<span class=\"hljs-preprocessor\">.now<\/span>(zone2)<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(now1<span class=\"hljs-preprocessor\">.isBefore<\/span>(now2))<span class=\"hljs-comment\">;  \/\/ false<\/span>\r\nlong hoursBetween = ChronoUnit<span class=\"hljs-preprocessor\">.HOURS<\/span><span class=\"hljs-preprocessor\">.between<\/span>(now1, now2)<span class=\"hljs-comment\">;<\/span>\r\nlong minutesBetween = ChronoUnit<span class=\"hljs-preprocessor\">.MINUTES<\/span><span class=\"hljs-preprocessor\">.between<\/span>(now1, now2)<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(hoursBetween)<span class=\"hljs-comment\">;       \/\/ -3<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(minutesBetween)<span class=\"hljs-comment\">;     \/\/ -239<\/span><\/code><\/pre>\n<p>LocalTime \u63d0\u4f9b\u4e86\u591a\u79cd\u5de5\u5382\u65b9\u6cd5\u6765\u7b80\u5316\u5bf9\u8c61\u7684\u521b\u5efa\uff0c\u5305\u62ec\u89e3\u6790\u65f6\u95f4\u5b57\u7b26\u4e32\u3002<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">LocalTime late = LocalTime<span class=\"hljs-preprocessor\">.of<\/span>(<span class=\"hljs-number\">23<\/span>, <span class=\"hljs-number\">59<\/span>, <span class=\"hljs-number\">59<\/span>)<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(late)<span class=\"hljs-comment\">;       \/\/ 23:59:59<\/span>\r\nDateTimeFormatter germanFormatter =\r\n    DateTimeFormatter\r\n        <span class=\"hljs-preprocessor\">.ofLocalizedTime<\/span>(FormatStyle<span class=\"hljs-preprocessor\">.SHORT<\/span>)\r\n        <span class=\"hljs-preprocessor\">.withLocale<\/span>(Locale<span class=\"hljs-preprocessor\">.GERMAN<\/span>)<span class=\"hljs-comment\">;<\/span>\r\nLocalTime leetTime = LocalTime<span class=\"hljs-preprocessor\">.parse<\/span>(<span class=\"hljs-string\">\"13:37\"<\/span>, germanFormatter)<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(leetTime)<span class=\"hljs-comment\">;   \/\/ 13:37<\/span><\/code><\/pre>\n<p><strong>LocalDate \u672c\u5730\u65e5\u671f<\/strong><br \/>\nLocalDate \u8868\u793a\u4e86\u4e00\u4e2a\u786e\u5207\u7684\u65e5\u671f\uff0c\u6bd4\u5982 2014-03-11\u3002\u8be5\u5bf9\u8c61\u503c\u662f\u4e0d\u53ef\u53d8\u7684\uff0c\u7528\u8d77\u6765\u548cLocalTime\u57fa\u672c\u4e00\u81f4\u3002\u4e0b\u9762\u7684\u4f8b\u5b50\u5c55\u793a\u4e86\u5982\u4f55\u7ed9Date\u5bf9\u8c61\u52a0\u51cf\u5929\/\u6708\/\u5e74\u3002\u53e6\u5916\u8981\u6ce8\u610f\u7684\u662f\u8fd9\u4e9b\u5bf9\u8c61\u662f\u4e0d\u53ef\u53d8\u7684\uff0c\u64cd\u4f5c\u8fd4\u56de\u7684\u603b\u662f\u4e00\u4e2a\u65b0\u5b9e\u4f8b\u3002<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">LocalDate today = LocalDate<span class=\"hljs-preprocessor\">.now<\/span>()<span class=\"hljs-comment\">;<\/span>\r\nLocalDate tomorrow = today<span class=\"hljs-preprocessor\">.plus<\/span>(<span class=\"hljs-number\">1<\/span>, ChronoUnit<span class=\"hljs-preprocessor\">.DAYS<\/span>)<span class=\"hljs-comment\">;<\/span>\r\nLocalDate yesterday = tomorrow<span class=\"hljs-preprocessor\">.minusDays<\/span>(<span class=\"hljs-number\">2<\/span>)<span class=\"hljs-comment\">;<\/span>\r\nLocalDate independenceDay = LocalDate<span class=\"hljs-preprocessor\">.of<\/span>(<span class=\"hljs-number\">2014<\/span>, Month<span class=\"hljs-preprocessor\">.JULY<\/span>, <span class=\"hljs-number\">4<\/span>)<span class=\"hljs-comment\">;<\/span>\r\nDayOfWeek dayOfWeek = independenceDay<span class=\"hljs-preprocessor\">.getDayOfWeek<\/span>()<span class=\"hljs-comment\">;<\/span>\r\n\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(dayOfWeek)<span class=\"hljs-comment\">;    \/\/ FRIDAY<\/span><\/code><\/pre>\n<p>\u4ece\u5b57\u7b26\u4e32\u89e3\u6790\u4e00\u4e2aLocalDate\u7c7b\u578b\u548c\u89e3\u6790LocalTime\u4e00\u6837\u7b80\u5355\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">DateTimeFormatter germanFormatter =\r\n    DateTimeFormatter\r\n        <span class=\"hljs-preprocessor\">.ofLocalizedDate<\/span>(FormatStyle<span class=\"hljs-preprocessor\">.MEDIUM<\/span>)\r\n        <span class=\"hljs-preprocessor\">.withLocale<\/span>(Locale<span class=\"hljs-preprocessor\">.GERMAN<\/span>)<span class=\"hljs-comment\">;<\/span>\r\nLocalDate xmas = LocalDate<span class=\"hljs-preprocessor\">.parse<\/span>(<span class=\"hljs-string\">\"24.12.2014\"<\/span>, germanFormatter)<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(xmas)<span class=\"hljs-comment\">;   \/\/ 2014-12-24<\/span><\/code><\/pre>\n<p>LocalDateTime \u672c\u5730\u65e5\u671f\u65f6\u95f4<br \/>\nLocalDateTime \u540c\u65f6\u8868\u793a\u4e86\u65f6\u95f4\u548c\u65e5\u671f\uff0c\u76f8\u5f53\u4e8e\u524d\u4e24\u8282\u5185\u5bb9\u5408\u5e76\u5230\u4e00\u4e2a\u5bf9\u8c61\u4e0a\u4e86\u3002LocalDateTime\u548cLocalTime\u8fd8\u6709LocalDate\u4e00\u6837\uff0c\u90fd\u662f\u4e0d\u53ef\u53d8\u7684\u3002LocalDateTime\u63d0\u4f9b\u4e86\u4e00\u4e9b\u80fd\u8bbf\u95ee\u5177\u4f53\u5b57\u6bb5\u7684\u65b9\u6cd5\u3002<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">LocalDateTime sylvester = LocalDateTime<span class=\"hljs-preprocessor\">.of<\/span>(<span class=\"hljs-number\">2014<\/span>, Month<span class=\"hljs-preprocessor\">.DECEMBER<\/span>, <span class=\"hljs-number\">31<\/span>, <span class=\"hljs-number\">23<\/span>, <span class=\"hljs-number\">59<\/span>, <span class=\"hljs-number\">59<\/span>)<span class=\"hljs-comment\">;<\/span>\r\nDayOfWeek dayOfWeek = sylvester<span class=\"hljs-preprocessor\">.getDayOfWeek<\/span>()<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(dayOfWeek)<span class=\"hljs-comment\">;      \/\/ WEDNESDAY<\/span>\r\nMonth month = sylvester<span class=\"hljs-preprocessor\">.getMonth<\/span>()<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(month)<span class=\"hljs-comment\">;          \/\/ DECEMBER<\/span>\r\nlong minuteOfDay = sylvester<span class=\"hljs-preprocessor\">.getLong<\/span>(ChronoField<span class=\"hljs-preprocessor\">.MINUTE<\/span>_OF_DAY)<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(minuteOfDay)<span class=\"hljs-comment\">;    \/\/ 1439<\/span><\/code><\/pre>\n<p>\u53ea\u8981\u9644\u52a0\u4e0a\u65f6\u533a\u4fe1\u606f\uff0c\u5c31\u53ef\u4ee5\u5c06\u5176\u8f6c\u6362\u4e3a\u4e00\u4e2a\u65f6\u95f4\u70b9Instant\u5bf9\u8c61\uff0cInstant\u65f6\u95f4\u70b9\u5bf9\u8c61\u53ef\u4ee5\u5f88\u5bb9\u6613\u7684\u8f6c\u6362\u4e3a\u8001\u5f0f\u7684java.util.Date\u3002<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">Instant instant = sylvester\r\n        <span class=\"hljs-preprocessor\">.atZone<\/span>(ZoneId<span class=\"hljs-preprocessor\">.systemDefault<\/span>())\r\n        <span class=\"hljs-preprocessor\">.toInstant<\/span>()<span class=\"hljs-comment\">;<\/span>\r\nDate legacyDate = Date<span class=\"hljs-preprocessor\">.from<\/span>(instant)<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(legacyDate)<span class=\"hljs-comment\">;     \/\/ Wed Dec 31 23:59:59 CET 2014<\/span><\/code><\/pre>\n<p>\u683c\u5f0f\u5316LocalDateTime\u548c\u683c\u5f0f\u5316\u65f6\u95f4\u548c\u65e5\u671f\u4e00\u6837\u7684\uff0c\u9664\u4e86\u4f7f\u7528\u9884\u5b9a\u4e49\u597d\u7684\u683c\u5f0f\u5916\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u81ea\u5df1\u5b9a\u4e49\u683c\u5f0f\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"hljs avrasm has-numbering\">DateTimeFormatter formatter =\r\n    DateTimeFormatter\r\n        <span class=\"hljs-preprocessor\">.ofPattern<\/span>(<span class=\"hljs-string\">\"MMM dd, yyyy - HH:mm\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\nLocalDateTime parsed = LocalDateTime<span class=\"hljs-preprocessor\">.parse<\/span>(<span class=\"hljs-string\">\"Nov 03, 2014 - 07:13\"<\/span>, formatter)<span class=\"hljs-comment\">;<\/span>\r\nString string = formatter<span class=\"hljs-preprocessor\">.format<\/span>(parsed)<span class=\"hljs-comment\">;<\/span>\r\nSystem<span class=\"hljs-preprocessor\">.out<\/span><span class=\"hljs-preprocessor\">.println<\/span>(string)<span class=\"hljs-comment\">;     \/\/ Nov 03, 2014 - 07:13<\/span><\/code><\/pre>\n<p>\u548cjava.text.NumberFormat\u4e0d\u4e00\u6837\u7684\u662f\u65b0\u7248\u7684DateTimeFormatter\u662f\u4e0d\u53ef\u53d8\u7684\uff0c\u6240\u4ee5\u5b83\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\u3002<br \/>\n\u5173\u4e8e\u65f6\u95f4\u65e5\u671f\u683c\u5f0f\u7684\u8be6\u7ec6\u4fe1\u606f\uff1a<br \/>\n<a href=\"http:\/\/download.java.net\/jdk8\/docs\/api\/java\/time\/format\/DateTimeFormatter.html\" target=\"_blank\" rel=\"noopener\">http:\/\/download.java.net\/jdk8\/docs\/api\/java\/time\/format\/DateTimeFormatter.html<\/a><\/p>\n<h2 id=\"\u5341annotation-\u6ce8\u89e3\"><a target=\"_blank\" name=\"t8\"><\/a>\u5341\u3001Annotation \u6ce8\u89e3<\/h2>\n<p>\u5728Java 8\u4e2d\u652f\u6301\u591a\u91cd\u6ce8\u89e3\u4e86<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\u8f6c\u8f7d\u8bf7\u6ce8\u660e\uff1a<a href=\"https:\/\/www.chenweikang.top\">\u5de6\u624b\u4ee3\u7801\u53f3\u624b\u8bd7<\/a> &raquo; <a href=\"https:\/\/www.chenweikang.top\/?p=489\">JDK8 \u5341\u5927\u65b0\u7279\u6027<\/a><\/p><div class=\"__youshang\">\r\n            <div id=\"__youshang_popup\" class=\"wechat popup\" style=\"display: none;\">\r\n                <div class=\"head\">~\u8c22\u8c22\u6253\u8d4f~<\/div>\r\n                <div class=\"qrcode\"><div class=\"qrcode-li wechat\" ><img src=\"https:\/\/www.chenweikang.top\/wp-content\/uploads\/2019\/07\/wexin.png\" \/><\/div><div class=\"qrcode-li alipay\" style=\"display:none;\"><img src=\"https:\/\/www.chenweikang.top\/wp-content\/uploads\/2019\/07\/ali-pay.png\" \/><\/div><div class=\"qrcode-li hongbao\" style=\"display:none;\"><img src=\"https:\/\/www.chenweikang.top\/wp-content\/uploads\/2019\/07\/ali-hongbao.png\" \/><\/div><\/div>\r\n                <ul class=\"platform\"><li class=\"icon-wechat active\" data-bg-color=\"#05af4e\" data-thanks=\"~\u8c22\u8c22\u6253\u8d4f~\"><\/li><li class=\"icon-alipay \" data-bg-color=\"#00a2ea\" data-thanks=\"~\u8c22\u8c22\u6253\u8d4f~\"><\/li><li class=\"icon-hongbao \" data-bg-color=\"#dd5746\" data-thanks=\"<p>\u626b\u7801\u9886\u7ea2\u5305<\/p><p style='margin-top: 24px;'>\uff08\u4f59\u989d\u5b9d\u652f\u4ed8\u65f6\u53ef\u62b5\u73b0\uff09<\/p>\"><\/li><\/ul>\r\n            <\/div>\r\n            <a href=\"javascript:void(0);\" id=\"__youshang_btn\">\u8d4f<\/a>\r\n        <\/div>","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u63a5\u53e3\u7684\u9ed8\u8ba4\u65b9\u6cd5 \u5728\u63a5\u53e3\u4e2d\u65b0\u589e\u4e86default\u65b9\u6cd5\u548cstatic\u65b9\u6cd5\uff0c\u8fd9\u4e24\u79cd\u65b9\u6cd5\u53ef\u4ee5\u6709\u65b9\u6cd5\u4f53 1\u3001stati [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":137,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8,3],"tags":[20],"class_list":["post-489","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","category-note","tag-java"],"_links":{"self":[{"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/posts\/489","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=489"}],"version-history":[{"count":0,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/posts\/489\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/media\/137"}],"wp:attachment":[{"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=489"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=489"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}