Lambda学习案例

package Lambda;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

enum  Gender{
     MALE,FEMALE
}

public class Person {
     private String givenName;
     private String surName;
     private int age;
     private Gender gender;
     private String eMail;
     private String phone;
     private String address;


     public static class Builder{

          private String givenName="";
          private String surName="";
          private int age = 0;
          private Gender gender = Gender.FEMALE;
          private String eMail = "";
          private String phone = "";
          private String address = "";

          public Person.Builder givenName(String givenName){
               this.givenName = givenName;
               return this;
          }

          public Person.Builder surName(String surName){
               this.surName = surName;
               return this;
          }

          public Person.Builder age (int val){
               age = val;
               return this;
          }

          public Person.Builder gender(Gender val){
               gender = val;
               return this;
          }

          public Person.Builder email(String val){
               eMail = val;
               return this;
          }

          public Person.Builder phoneNumber(String val){
               phone = val;
               return this;
          }

          public Person.Builder address(String val){
               address = val;
               return this;
          }

          public Person build(){
               return new Person(this);
          }
     }



     private Person(){
          super();
     }

     private Person(Person.Builder builder){

          givenName = builder.givenName;
          surName = builder.surName;
          age = builder.age;
          gender = builder.gender;
          eMail = builder.eMail;
          phone = builder.phone;
          address = builder.address;
     }

     public String getGivenName(){
          return givenName;
     }

     public String getSurName(){
          return surName;
     }

     public int getAge(){
          return age;
     }

     public Gender getGender(){
          return gender;
     }

     public String getEmail(){
          return eMail;
     }

     public String getPhone(){
          return phone;
     }

     public String getAddress(){
          return address;
     }

     public void print(){
          System.out.println(
                  "\nName: " + givenName + " " + surName + "\n" +
                          "Age: " + age + "\n" +
                          "Gender: " + gender + "\n" +
                          "eMail: " + eMail + "\n" +
                          "Phone: " + phone + "\n" +
                          "Address: " + address + "\n"
          );
     }

     public String printCustom(Function<Person, String> f){
          return f.apply(this);
     }


     public void printWesternName(){

          System.out.println("\nName: " + this.getGivenName() + " " + this.getSurName() + "\n" +
                  "Age: " + this.getAge() + "  " + "Gender: " + this.getGender() + "\n" +
                  "EMail: " + this.getEmail() + "\n" +
                  "Phone: " + this.getPhone() + "\n" +
                  "Address: " + this.getAddress());
     }


     public void printEasternName(){

          System.out.println("\nName: " + this.getSurName() + " " + this.getGivenName() + "\n" +
                  "Age: " + this.getAge() + "  " + "Gender: " + this.getGender() + "\n" +
                  "EMail: " + this.getEmail() + "\n" +
                  "Phone: " + this.getPhone() + "\n" +
                  "Address: " + this.getAddress());
     }


     @Override
     public String toString(){
          return "Name: " + givenName + " " + surName + "\n" + "Age: " + age + "  Gender: " + gender + "\n" + "eMail: " + eMail + "\n";
     }

     public static List<Person> createShortList(){
          List<Person> people = new ArrayList<>();

          people.add(
                  new Person.Builder()
                          .givenName("zhang")
                          .surName("3")
                          .age(21)
                          .gender(Gender.MALE)
                          .email("zhangsan@example.com")
                          .phoneNumber("0571-1214678")
                          .address("zhang3 address")
                          .build()
          );

          people.add(
                  new Person.Builder()
                          .givenName("li")
                          .surName("4")
                          .age(25)
                          .gender(Gender.FEMALE)
                          .email("li4@example.com")
                          .phoneNumber("0571-1214678")
                          .address("li4 address")
                          .build()
          );

          people.add(
                  new Person.Builder()
                          .givenName("wang")
                          .surName("5")
                          .age(25)
                          .gender(Gender.MALE)
                          .email("wang5@example.com")
                          .phoneNumber("0571-1214678")
                          .address("wang5 address")
                          .build()
          );

          people.add(
                  new Person.Builder()
                          .givenName("zhang")
                          .surName("1")
                          .age(45)
                          .gender(Gender.MALE)
                          .email("zhang1@example.com")
                          .phoneNumber("0571-1214678")
                          .address("zhang1 address ")
                          .build()
          );




          return people;
     }



}
package Lambda;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Predicate;

public class SearchCriteria {
   
     private final Map<String, Predicate<Person>> searchMap = new HashMap<>();
   
     private SearchCriteria() {
       super();
       initSearchMap();
     }
   
     private void initSearchMap() {
       Predicate<Person> allDrivers = p -> p.getAge() >= 16;
       Predicate<Person> allDraftees = p -> p.getAge() >= 18 && p.getAge() <= 25 && p.getGender() == Gender.MALE;
       Predicate<Person> allPilots = p -> p.getAge() >= 23 && p.getAge() <= 65;
   
       searchMap.put("allDrivers", allDrivers);
       searchMap.put("allDraftees", allDraftees);
       searchMap.put("allPilots", allPilots);
   
     }
   
     public Predicate<Person> getCriteria(String PredicateName) {
       Predicate<Person> target;
   
       target = searchMap.get(PredicateName);
   
       if (target == null) {
   
         System.out.println("Search Criteria not found... ");
         System.exit(1);
       
       }
         
       return target;
   
     }
   
     public static SearchCriteria getInstance() {
       return new SearchCriteria();
     }
   }

** ForEach **

package Lambda;

import java.util.List;

public class Test01ForEach {
     
     public static void main(String[] args) {
       
       List<Person> pl = Person.createShortList();
       
       System.out.println("\n=== Western Phone List ===");
       pl.forEach( p -> p.printWesternName() );
       
       System.out.println("\n=== Eastern Phone List ===");
       pl.forEach(Person::printEasternName);
       
       System.out.println("\n=== Custom Phone List ===");
       pl.forEach(p -> { System.out.println(p.printCustom(r -> "Name: " + r.getGivenName() + " EMail: " + r.getEmail())); });
       
     }
   
   }

***Filter ***

package Lambda;

import java.util.List;

public class Test02Filter {
     
     public static void main(String[] args) {
   
       List<Person> pl = Person.createShortList();
       
       SearchCriteria search = SearchCriteria.getInstance();
       
       System.out.println("\n=== Western Pilot Phone List ===");
   
       pl.stream().filter(search.getCriteria("allPilots"))
         .forEach(Person::printWesternName);
       
      
       System.out.println("\n=== Eastern Draftee Phone List ===");
   
       pl.stream().filter(search.getCriteria("allDraftees"))
         .forEach(Person::printEasternName);
       
     }
   }

*** toList***

package Lambda;

import java.util.List;
import java.util.stream.Collectors;

public class Test03toList {
     
     public static void main(String[] args) {
       
       List<Person> pl = Person.createShortList();
       
       SearchCriteria search = SearchCriteria.getInstance();
       
       // Make a new list after filtering.
       List<Person> pilotList = pl
               .stream()
               .filter(search.getCriteria("allPilots"))
               .collect(Collectors.toList());
       
       System.out.println("\n=== Western Pilot Phone List ===");
       pilotList.forEach(Person::printWesternName);
   
     }
   
   }

*** toMap ***

package Lambda;

import java.util.List;
import java.util.OptionalDouble;

public class Test04Map {

  public static void main(String[] args) {
    List<Person> pl = Person.createShortList();
    
    SearchCriteria search = SearchCriteria.getInstance();
    
    // Calc average age of pilots old style
    System.out.println("== Calc Old Style ==");
    int sum = 0;
    int count = 0;
    
    for (Person p:pl){
      if (p.getAge() >= 23 && p.getAge() <= 65 ){
        sum = sum + p.getAge();
        count++;
      }
    }
    
    long average = sum / count;
    System.out.println("Total Ages: " + sum);
    System.out.println("Average Age: " + average);
    
    
    // Get sum of ages
    System.out.println("\n== Calc New Style ==");
    long totalAge = pl
            .stream()
            .filter(search.getCriteria("allPilots"))
            .mapToInt(p -> p.getAge())
            .sum();

    // Get average of ages
    OptionalDouble averageAge = pl
            .parallelStream()
            .filter(search.getCriteria("allPilots"))
            .mapToDouble(p -> p.getAge())
            .parallel()
            .average();

    System.out.println("Total Ages: " + totalAge);
    System.out.println("Average Age: " + averageAge.getAsDouble());
      System.out.println(String.format("it's %d ad %d",1,2));
  }
  
}

*** main 方法***

package Lambda;

import java.util.List;
import java.util.stream.Collectors;

/**
 * Created by 80374563 on 2018/11/7.
 */
public class LambdaStaret {

    public static void main(String[] args) {
        long st = System.currentTimeMillis();
        System.out.println("done : " + (System.currentTimeMillis() - st) + " msecs");


        //Lambda
        Runnable r = ()-> {int i=9; System.out.println(i);  };
        r.run();


        //2.
        List<Person> pl = Person.createShortList();

             SearchCriteria search = SearchCriteria.getInstance();

             // Make a new list after filtering.
             List<Person> pilotList = pl
                     .stream()
                     .filter(search.getCriteria("allPilots"))
                     .collect(Collectors.toList());

             System.out.println("\n=== Western Pilot Phone List ===");
             pilotList.forEach(Person::printWesternName);


    }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • Java 8 lambda 表达式10个示例 Java 8 发布于4年前,日期是2014年3月18日,这次开创性的...
    认真期待阅读 1,382评论 2 6
  • Scala的集合类可以从三个维度进行切分: 可变与不可变集合(Immutable and mutable coll...
    时待吾阅读 5,815评论 0 4
  • 首页 资讯 文章 资源 小组 相亲 登录 注册 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他...
    Helen_Cat阅读 3,869评论 1 10
  • 1. 什么是λ表达式 λ表达式本质上是一个匿名方法。让我们来看下面这个例子: public int add(int...
    黎景阳阅读 2,157评论 1 3
  • 一毕业,一实习完,面临着找工作,可是茫茫职场,却没有我能找到的工作,证书没下来,面临的是超低甚至是倒贴的工资,于是...
    希翼阅读 274评论 0 2