﻿{"id":978,"date":"2013-05-26T14:49:40","date_gmt":"2013-05-26T05:49:40","guid":{"rendered":"http:\/\/yucchi.jp\/blog\/?p=978"},"modified":"2013-05-26T14:49:40","modified_gmt":"2013-05-26T05:49:40","slug":"%e3%82%82%e3%81%a3%e3%81%a8-lambda-%e3%81%9d%e3%81%ae%ef%bc%99","status":"publish","type":"post","link":"http:\/\/yucchi.jp\/blog\/?p=978","title":{"rendered":"\u3082\u3063\u3068 Lambda \u305d\u306e\uff19"},"content":{"rendered":"<p>\u305a\u3063\u3068\u30d6\u30ed\u30b0\u306e\u66f4\u65b0\u3055\u307c\u3063\u3066\u307e\u3057\u305f\u3002<\/p>\n<p>\u3044\u308d\u3044\u308d\u30cd\u30bf\u306f\u3042\u308b\u306e\u3067\u3059\u304c\u5fd9\u3057\u3044\u6bce\u65e5\u3092\u7406\u7531\u306e\u4e00\u3064\u3068\u3057\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002(\uffe3\u3002\uffe3;)<\/p>\n<p>\u305d\u308c\u3068\u4f53\u306e\u8abf\u5b50\u304c\u826f\u304f\u306a\u304f\u3066\u75c5\u306b\u5012\u308c\u3066\u307e\u3057\u305f\u3002<\/p>\n<p>\u306a\u3093\u3068\u304b\u5fa9\u6d3b\u3057\u305f\u306e\u3067 Java8 \u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u30b5\u30af\u30c3\u3068\u30dd\u30b9\u30c8\u3057\u3088\u3046\u304b\u3068\u304c\u3093\u3070\u3063\u3066\u307f\u307e\u3059\u3002<\/p>\n<p>Java Day Tokyo 2013 \u304c\u958b\u50ac\u3055\u308c\u3066\u304b\u3089\u65e5\u672c\u8a9e\u3067\u306e Java8 \u306e\u60c5\u5831\u304c\u3061\u3089\u307b\u3089\u898b\u53d7\u3051\u3089\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u5b09\u3057\u3044\u3067\u3059\u306d\u3002<\/p>\n<p>\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u300c\u3082\u3063\u3068 Lambda\u300d\u30b7\u30ea\u30fc\u30ba\u3067\u3059\u3002<\/p>\n<p>\u4eca\u56de\u306f\u4eca\u307e\u3067\u4f7f\u3063\u305f\u3053\u3068\u304c\u7121\u3044 flatMap \u3092\u4f7f\u3063\u3066\u307f\u307e\u3059\u3002<\/p>\n<p>\u5b9f\u306f\u3053\u306e flatMap \u306e\u4f7f\u3044\u3069\u3053\u308d\u304c\u826f\u304f\u89e3\u3089\u305a\u306b\u3044\u305f\u306e\u3067\u3059\u304c\u300c\u5275\u308b Java\u300d\u306e\u8457\u8005\u3067\u3042\u308b \u304d\u3057\u3060\u3055\u3093\u306e\u30d6\u30ed\u30b0\u306b\u3066\u8aac\u660e\u304c\u3042\u308a\u3001<\/p>\n<p>\u3044\u304f\u3064\u304b\u306e\u30ea\u30b9\u30c8\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u4e00\u3064\u306e\u30ea\u30b9\u30c8\u3092\u5275\u308a\u305f\u3044\u5834\u5408\u306b\u4f7f\u3048\u308b\u3068\u306e\u3053\u3068\u3067\u3057\u305f\u3002<\/p>\n<p>JavaDoc \u3092\u53c2\u8003\u307e\u3067\u306b<\/p>\n<h3><span style=\"color: #ff0000;\"><strong>flatMap()<\/strong><\/span><\/h3>\n<p>java.\u200butil.\u200bstream.\u200bStream<\/p>\n<p>public Stream flatMap(Function<!--? super T,? extends Stream<? extends R-->&gt; mapper)<\/p>\n<p>Returns a stream consisting of the results of replacing each element of this stream with the contents of the stream produced by applying the provided mapping function to each element. If the result of the mapping function is null, this is treated as if the result is an empty stream.<\/p>\n<p>This is an intermediate operation.<\/p>\n<p>\u30d1\u30e9\u30e1\u30fc\u30bf:<br \/>\nmapper &#8211; a non-interfering, stateless function to apply to each element which produces a stream of new values<\/p>\n<p>\u578b\u30d1\u30e9\u30e1\u30fc\u30bf:<br \/>\nR &#8211; The element type of the new stream<\/p>\n<p>\u623b\u308a\u5024:<br \/>\nthe new stream<\/p>\n<p>&nbsp;<\/p>\n<p>\u65e9\u901f\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<pre title=\"Person.java\">package mylambdaexamples_2;\r\n\r\nimport java.time.LocalDate;\r\nimport java.time.Period;\r\n\r\npublic class Person {\r\n\r\n    public enum Sex {\r\n\r\n        MALE, FEMALE\r\n    }\r\n    String firstName;\r\n    String lastName;\r\n    LocalDate birthday;\r\n    Sex gender;\r\n\r\n    public Person(String firstName, String lastName, LocalDate birthday, Sex gender) {\r\n        this.firstName = firstName;\r\n        this.lastName = lastName;\r\n        this.birthday = birthday;\r\n        this.gender = gender;\r\n    }\r\n\r\n    public String getFirstName() {\r\n        return firstName;\r\n    }\r\n\r\n    public String getLastName() {\r\n        return lastName;\r\n    }\r\n\r\n    public Sex getGender() {\r\n        return gender;\r\n    }\r\n\r\n    public int getAge() {\r\n        return Period.between(birthday, LocalDate.now()).getYears();\r\n    }\r\n\r\n    void printPerson() {\r\n        System.out.println(firstName + \" \" + lastName + \", \" + this.getAge() + \"\u6b73\" + \", Gender: \"\r\n                + this.getGender());\r\n    }\r\n}<\/pre>\n<pre title=\"MyLambdaExamples_2.java\">package mylambdaexamples_2;\r\n\r\nimport java.time.LocalDate;\r\nimport java.util.ArrayList;\r\nimport java.util.Arrays;\r\nimport java.util.List;\r\nimport java.util.Optional;\r\nimport java.util.function.Consumer;\r\nimport java.util.stream.Collectors;\r\n\r\npublic class MyLambdaExamples_2 {\r\n\r\n    public static void main(String[] args) {\r\n        List person = new ArrayList&lt;&gt;();\r\n        person.add(new Person(\"\u67f4\u7530\", \"\u606d\u5e73\", LocalDate.of(1951, 8, 18), Person.Sex.MALE));\r\n        person.add(new Person(\"\u58c7\", \"\u871c\", LocalDate.of(1980, 12, 3), Person.Sex.FEMALE));\r\n        person.add(new Person(\"\u5317\u5ddd\", \"\u666f\u5b50\", LocalDate.of(1986, 8, 22), Person.Sex.FEMALE));\r\n        person.add(new Person(\"\u7dbe\u702c\", \"\u306f\u308b\u304b\", LocalDate.of(1985, 3, 24), Person.Sex.FEMALE));\r\n        person.add(new Person(\"\u4f50\u3005\u6728\", \"\u5e0c\", LocalDate.of(1988, 2, 8), Person.Sex.FEMALE));\r\n        person.add(new Person(\"\u525b\u529b\", \"\u5f69\u82bd\", LocalDate.of(1992, 8, 27), Person.Sex.FEMALE));\r\n        person.add(new Person(\"\u5c0f\u6817\", \"\u65ec\", LocalDate.of(1982, 12, 26), Person.Sex.MALE));\r\n        person.add(new Person(\"\u5800\u5317\", \"\u771f\u5e0c\", LocalDate.of(1988, 10, 6), Person.Sex.FEMALE));\r\n        person.add(new Person(\"\u6b66\u4e95\", \"\u54b2\", LocalDate.of(1993, 12, 25), Person.Sex.FEMALE));\r\n        person.add(new Person(\"\u5e02\u539f\", \"\u96bc\u4eba\", LocalDate.of(1987, 2, 6), Person.Sex.MALE));\r\n        person.add(new Person(\"\u6df1\u7530\", \"\u606d\u5b50\", LocalDate.of(1982, 11, 2), Person.Sex.FEMALE));\r\n\r\n        \/\/ Person \u8868\u793a\r\n        System.out.println(\"\\n&lt;-- Person \u8868\u793a --&gt;\");\r\n        person.forEach(e -&gt; {\r\n            e.printPerson();\r\n        });\r\n\r\n        \/\/ \u5973\u6027\u306e\u540d\u524d\u306b\u201d\u3055\u3093\u201d\u3092\u3064\u3051\u3066\u8868\u793a\r\n        person.stream()\r\n                .filter(e -&gt; e.getGender() == Person.Sex.FEMALE)\r\n                .map(Person::getLastName)\r\n                .flatMap(e -&gt; Arrays.asList(e.concat(\"\u3055\u3093\")).stream())\r\n                .forEach(System.out::println);\r\n\r\n    }\r\n}<\/pre>\n<p>\u5973\u6027\u306e\u540d\u524d\u306b\u201d\u3055\u3093\u201d\u3092\u3064\u3051\u308b\u3060\u3051\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3059\u3002<\/p>\n<p>filter(e -&gt; e.getGender() == Person.Sex.FEMALE) \u3067\u5973\u6027\u3060\u3051\u5bfe\u8c61\u3068\u3057\u3066<\/p>\n<p>map(Person::getLastName) \u3067\u540d\u524d\u3067\u30b9\u30c8\u30ea\u30fc\u30e0\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u518d\u69cb\u7bc9\u3057\u3001<\/p>\n<p>flatMap(e -&gt; Arrays.asList(e.concat(&#8220;\u3055\u3093&#8221;)).stream()) \u3067\u201d\u3055\u3093\u201d\u3092\u4ed8\u3051\u8db3\u3057\u3066\u65b0\u305f\u306b\u30b9\u30c8\u30ea\u30fc\u30e0\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u518d\u69cb\u7bc9\u3057\u3066\u3067\u304d\u3042\u304c\u308a\u3002(^_^)<\/p>\n<p>\u201d\u3055\u3093\u201d\u3092\u4ed8\u3051\u308b\u3060\u3051\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u306a\u3089\u3053\u3093\u306a\u3053\u3068\u306f\u3057\u306a\u304f\u3066\u3082\u3044\u3044\u3051\u3069\u540d\u524d\u306b\u201d\u3055\u3093\u201d\u3092\u4ed8\u3051\u305f\u30b9\u30c8\u30ea\u30fc\u30e0\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u65b0\u305f\u306b\u5fc5\u8981\u3068\u3059\u308b\u3068\u304d\u306b\u4fbf\u5229\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u306d\u3002<\/p>\n<p>\u5b9f\u884c\u7d50\u679c\u306f\u671f\u5f85\u901a\u308a\u3067\u3059\u3002<\/p>\n<p>&lt;&#8211; Person \u8868\u793a &#8211;&gt;<br \/>\n\u67f4\u7530 \u606d\u5e73, 61\u6b73, Gender: MALE<br \/>\n\u58c7 \u871c, 32\u6b73, Gender: FEMALE<br \/>\n\u5317\u5ddd \u666f\u5b50, 26\u6b73, Gender: FEMALE<br \/>\n\u7dbe\u702c \u306f\u308b\u304b, 28\u6b73, Gender: FEMALE<br \/>\n\u4f50\u3005\u6728 \u5e0c, 25\u6b73, Gender: FEMALE<br \/>\n\u525b\u529b \u5f69\u82bd, 20\u6b73, Gender: FEMALE<br \/>\n\u5c0f\u6817 \u65ec, 30\u6b73, Gender: MALE<br \/>\n\u5800\u5317 \u771f\u5e0c, 24\u6b73, Gender: FEMALE<br \/>\n\u6b66\u4e95 \u54b2, 19\u6b73, Gender: FEMALE<br \/>\n\u5e02\u539f \u96bc\u4eba, 26\u6b73, Gender: MALE<br \/>\n\u6df1\u7530 \u606d\u5b50, 30\u6b73, Gender: FEMALE<br \/>\n\u871c\u3055\u3093<br \/>\n\u666f\u5b50\u3055\u3093<br \/>\n\u306f\u308b\u304b\u3055\u3093<br \/>\n\u5e0c\u3055\u3093<br \/>\n\u5f69\u82bd\u3055\u3093<br \/>\n\u771f\u5e0c\u3055\u3093<br \/>\n\u54b2\u3055\u3093<br \/>\n\u606d\u5b50\u3055\u3093<\/p>\n<p>Java8 \u306e\u30ea\u30ea\u30fc\u30b9\u304c\u6765\u5e74\u306e\uff12\u6708\u306b\u5909\u66f4\u306b\u306a\u3063\u305f\u3088\u3046\u3067\u3059\u3002<\/p>\n<p>\u305f\u3057\u304b Future Complete \u304c\uff12\uff0e\uff13\u65e5\u524d\u306e\u4e88\u5b9a\u3060\u3063\u305f\u3088\u3046\u306a\u30fb\u30fb\u30fb<\/p>\n<p>\u3044\u305a\u308c\u306b\u305b\u3088\u3001\u65e9\u304f\u30ea\u30ea\u30fc\u30b9\u3057\u3066\u307b\u3057\u3044\u3067\u3059\u3002<\/p>\n<div class=\"wlWriterEditableSmartContent\" id=\"scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ec601b46-24c0-424f-a7cb-2b15c0fae647\" style=\"margin: 0px; padding: 0px; float: none; display: inline;\">Hatena \u30bf\u30b0: <a href=\"http:\/\/b.hatena.ne.jp\/t\/Java\" rel=\"tag\">Java<\/a><\/div>\n<div class='wp_social_bookmarking_light'>\n            <div class=\"wsbl_hatena\"><a href='\/\/b.hatena.ne.jp\/add?mode=confirm&url=http%3A%2F%2Fyucchi.jp%2Fblog%2F%3Fp%3D978&title=%E3%82%82%E3%81%A3%E3%81%A8%20Lambda%20%E3%81%9D%E3%81%AE%EF%BC%99' title='\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='http:\/\/yucchi.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/hatena.gif' alt='\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0' title='\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0' width='16' height='12' class='wp_social_bookmarking_light_img' \/><\/a><\/div>\n            <div class=\"wsbl_facebook\"><a href='http:\/\/www.facebook.com\/share.php?u=http%3A%2F%2Fyucchi.jp%2Fblog%2F%3Fp%3D978&t=%E3%82%82%E3%81%A3%E3%81%A8%20Lambda%20%E3%81%9D%E3%81%AE%EF%BC%99' title='Facebook \u306b\u30b7\u30a7\u30a2' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='http:\/\/yucchi.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/facebook.png' alt='Facebook \u306b\u30b7\u30a7\u30a2' title='Facebook \u306b\u30b7\u30a7\u30a2' width='16' height='16' class='wp_social_bookmarking_light_img' \/><\/a><\/div>\n            <div class=\"wsbl_google_plus_one\"><g:plusone size=\"medium\" annotation=\"none\" href=\"http:\/\/yucchi.jp\/blog\/?p=978\" ><\/g:plusone><\/div>\n            <div class=\"wsbl_twitter\"><a href=\"https:\/\/twitter.com\/share\" class=\"twitter-share-button\" data-url=\"http:\/\/yucchi.jp\/blog\/?p=978\" data-text=\"\u3082\u3063\u3068 Lambda \u305d\u306e\uff19\" data-lang=\"ja\">Tweet<\/a><\/div>\n    <\/div>\n<br class='wp_social_bookmarking_light_clear' \/>\n","protected":false},"excerpt":{"rendered":"<p>\u305a\u3063\u3068\u30d6\u30ed\u30b0\u306e\u66f4\u65b0\u3055\u307c\u3063\u3066\u307e\u3057\u305f\u3002 \u3044\u308d\u3044\u308d\u30cd\u30bf\u306f\u3042\u308b\u306e\u3067\u3059\u304c\u5fd9\u3057\u3044\u6bce\u65e5\u3092\u7406\u7531\u306e\u4e00\u3064\u3068\u3057\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002(\uffe3\u3002\uffe3;) \u305d\u308c\u3068\u4f53\u306e\u8abf\u5b50\u304c\u826f\u304f\u306a\u304f\u3066\u75c5\u306b\u5012\u308c\u3066\u307e\u3057\u305f\u3002 \u306a\u3093\u3068\u304b\u5fa9\u6d3b\u3057\u305f\u306e\u3067 Java8 \u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u30b5\u30af\u30c3\u3068\u30dd\u30b9\u30c8\u3057\u3088\u3046\u304b\u3068\u304c\u3093\u3070\u3063\u3066\u307f\u307e\u3059\u3002 Java Day Tokyo 2013 \u304c\u958b\u50ac\u3055\u308c\u3066\u304b\u3089\u65e5\u672c\u8a9e\u3067\u306e Java8 \u306e\u60c5\u5831\u304c\u3061\u3089\u307b\u3089\u898b\u53d7\u3051\u3089\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u5b09\u3057\u3044\u3067\u3059\u306d\u3002 \u3068\u3044\u3046\u3053\u3068\u3067\u3001\u300c\u3082\u3063\u3068 Lambda\u300d\u30b7\u30ea\u30fc\u30ba\u3067\u3059\u3002 \u4eca\u56de\u306f\u4eca\u307e\u3067\u4f7f\u3063\u305f\u3053\u3068\u304c\u7121\u3044 flatMap \u3092\u4f7f\u3063\u3066\u307f\u307e\u3059\u3002 \u5b9f\u306f\u3053\u306e flatMap \u306e\u4f7f\u3044\u3069\u3053\u308d\u304c\u826f\u304f\u89e3\u3089\u305a\u306b\u3044\u305f\u306e\u3067\u3059\u304c\u300c\u5275\u308b Java\u300d\u306e\u8457\u8005\u3067\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[17],"class_list":["post-978","post","type-post","status-publish","format-standard","hentry","category-java","tag-java"],"_links":{"self":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/978","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=978"}],"version-history":[{"count":10,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/978\/revisions"}],"predecessor-version":[{"id":989,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/978\/revisions\/989"}],"wp:attachment":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=978"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=978"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}