{"id":203,"date":"2011-11-01T00:53:49","date_gmt":"2011-11-01T00:53:49","guid":{"rendered":"http:\/\/choudhury.com\/blog\/?p=203"},"modified":"2012-06-30T12:44:53","modified_gmt":"2012-06-30T12:44:53","slug":"experimenting-with-java-lambda-syntax","status":"publish","type":"post","link":"https:\/\/choudhury.com\/blog\/2011\/11\/01\/experimenting-with-java-lambda-syntax\/","title":{"rendered":"Experimenting with Java lambda syntax"},"content":{"rendered":"<p>On the lambda dev forum <a href=\"http:\/\/mail.openjdk.java.net\/pipermail\/lambda-dev\/2011-September\/003936.html\">it was announced the Java lambda syntax ( planned for Java 8 ) will be based on the C# syntax.<\/a>, it will use thin arrow &#8220;->&#8221; rather C#&#8217;s fat arrow &#8220;=>&#8221; . I was curious to see what Java code with lambdas will look like using Swing.<\/p>\n<p>To experiment with lambda, you can use a special build of the JDK with lambda support <\/p>\n<p><a href=\"http:\/\/jdk8.java.net\/lambda\/\" title=\"http:\/\/jdk8.java.net\/lambda\/\">http:\/\/jdk8.java.net\/lambda\/<\/a><\/p>\n<p>To compile java files using the lambda features, nake sure you using javac is taken from the bin directory of this lambda jdk build.<\/p>\n<p>Below is the non lambda version of the Example &#8211; using anonymous inner classes for the ActionListener and for the Runnable.<\/p>\n<div class=\"codecolorer-container java default\" style=\"overflow:auto;white-space:nowrap;height:300px;\"><div class=\"java codecolorer\"><span class=\"kw1\">import<\/span> <span class=\"co2\">javax.swing.*<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">import<\/span> <span class=\"co2\">java.awt.*<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">import<\/span> <span class=\"co2\">java.awt.event.*<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">public<\/span> <span class=\"kw1\">class<\/span> TestInnerClass<span class=\"br0\">&#123;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">public<\/span> <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> showUI<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jframe\"><span class=\"kw3\">JFrame<\/span><\/a> frame <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jframe\"><span class=\"kw3\">JFrame<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Anonymous Inner Class Example&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nframe.<span class=\"me1\">setDefaultCloseOperation<\/span><span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jframe\"><span class=\"kw3\">JFrame<\/span><\/a>.<span class=\"me1\">EXIT_ON_CLOSE<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jbutton\"><span class=\"kw3\">JButton<\/span><\/a> button <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jbutton\"><span class=\"kw3\">JButton<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Click Me&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nbutton.<span class=\"me1\">addActionListener<\/span><span class=\"br0\">&#40;<\/span><br \/>\n<span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+actionlistener\"><span class=\"kw3\">ActionListener<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">public<\/span> <span class=\"kw4\">void<\/span> actionPerformed<span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+actionevent\"><span class=\"kw3\">ActionEvent<\/span><\/a> e<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;button clicked&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+container\"><span class=\"kw3\">Container<\/span><\/a> contentPane <span class=\"sy0\">=<\/span> frame.<span class=\"me1\">getContentPane<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\ncontentPane.<span class=\"me1\">add<\/span><span class=\"br0\">&#40;<\/span>button, <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+borderlayout\"><span class=\"kw3\">BorderLayout<\/span><\/a>.<span class=\"me1\">CENTER<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nframe.<span class=\"me1\">setSize<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">300<\/span>, <span class=\"nu0\">100<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nframe.<span class=\"me1\">setVisible<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">true<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">public<\/span> <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> main<span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> args<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+swingutilities\"><span class=\"kw3\">SwingUtilities<\/span><\/a>.<span class=\"me1\">invokeLater<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+runnable\"><span class=\"kw3\">Runnable<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">public<\/span> <span class=\"kw4\">void<\/span> run<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\nshowUI<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>&nbsp;<\/p>\n<p>The above is not very interesting, now let&#8217;s convert those inner classes to use the lambda syntax..<\/p>\n<p>&nbsp;<\/p>\n<div class=\"codecolorer-container java default\" style=\"overflow:auto;white-space:nowrap;height:300px;\"><div class=\"java codecolorer\"><span class=\"kw1\">import<\/span> <span class=\"co2\">javax.swing.*<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">import<\/span> <span class=\"co2\">java.awt.*<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">import<\/span> <span class=\"co2\">java.awt.event.*<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">public<\/span> <span class=\"kw1\">class<\/span> TestLambda<span class=\"br0\">&#123;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">public<\/span> <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> showUI<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jframe\"><span class=\"kw3\">JFrame<\/span><\/a> frame <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jframe\"><span class=\"kw3\">JFrame<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Lambda Example&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nframe.<span class=\"me1\">setDefaultCloseOperation<\/span><span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jframe\"><span class=\"kw3\">JFrame<\/span><\/a>.<span class=\"me1\">EXIT_ON_CLOSE<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jbutton\"><span class=\"kw3\">JButton<\/span><\/a> button <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jbutton\"><span class=\"kw3\">JButton<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Click Me&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nbutton.<span class=\"me1\">addActionListener<\/span><span class=\"br0\">&#40;<\/span> <span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">-&gt;<\/span> <span class=\"br0\">&#123;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;button clicked&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+container\"><span class=\"kw3\">Container<\/span><\/a> contentPane <span class=\"sy0\">=<\/span> frame.<span class=\"me1\">getContentPane<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\ncontentPane.<span class=\"me1\">add<\/span><span class=\"br0\">&#40;<\/span>button, <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+borderlayout\"><span class=\"kw3\">BorderLayout<\/span><\/a>.<span class=\"me1\">CENTER<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nframe.<span class=\"me1\">setSize<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">300<\/span>, <span class=\"nu0\">100<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nframe.<span class=\"me1\">setVisible<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">true<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">public<\/span> <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> main<span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> args<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+swingutilities\"><span class=\"kw3\">SwingUtilities<\/span><\/a>.<span class=\"me1\">invokeLater<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">-&gt;<\/span> <span class=\"br0\">&#123;<\/span>showUI<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>&nbsp;<br \/>\nUsing the lambda syntax, the code looks more concise, it has less ceremony (code that offers very little information).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>On the lambda dev forum it was announced the Java lambda syntax ( planned for Java 8 ) will be based on the C# syntax., it will use thin arrow &#8220;->&#8221; rather C#&#8217;s fat arrow &#8220;=>&#8221; . I was curious to see what Java code with lambdas will look like using Swing. To experiment with &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/choudhury.com\/blog\/2011\/11\/01\/experimenting-with-java-lambda-syntax\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Experimenting with Java lambda syntax&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3,8],"tags":[],"class_list":["post-203","post","type-post","status-publish","format-standard","hentry","category-java","category-swing"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/posts\/203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/comments?post=203"}],"version-history":[{"count":63,"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/posts\/203\/revisions"}],"predecessor-version":[{"id":403,"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/posts\/203\/revisions\/403"}],"wp:attachment":[{"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/media?parent=203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/categories?post=203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/tags?post=203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}