美文网首页
Lambda学习案例

Lambda学习案例

作者: 梦想又照进现实 | 来源:发表于2018-11-08 17:57 被阅读0次
    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);
    
    
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:Lambda学习案例

          本文链接:https://www.haomeiwen.com/subject/iwawxqtx.html