Java Lambda表達式學習

原文地址:https://blog.csdn.net/renfufei/article/details/24600507

基本的Lambda循環
// Old looping
    for (String player : players) {
        System.out.print(player + "; ");
    }

    System.out.println("");

    // Using lambda expression and functional operations
    players.forEach((player) -> System.out.print(player + "; "));

    System.out.println("");

    // Using double colon operator in Java 8
    players.forEach(System.out::println);

使用Lombda排序集合
// 1.2 使用 lambda expression 排序 players
Comparator<String> sortByName = (String s1, String s2) -> (s1.compareTo(s2));
Arrays.sort(players, sortByName);
// 1.3 也可以採用如下形式:
Arrays.sort(players, (String s1, String s2) -> (s1.compareTo(s2)));

原文有更加詳細的翻譯,這裏只是做一個留下一個印象

使用Lambdas和Streams
使用lambdas可以支持許多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等。

過濾器

    過濾器
     System.out.println("下面是月薪超過 $1,400 的PHP程序員:")
     phpProgrammers.stream()
      .filter((p) -> (p.getSalary() > 1400))
      .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));
      過濾器在處理信息中有很大方便的方面。
      // 定義 filters
      Predicate<Person> ageFilter = (p) -> (p.getAge() > 25);
      Predicate<Person> salaryFilter = (p) -> (p.getSalary() > 1400);
      Predicate<Person> genderFilter = (p) ->  ("female".equals(p.getGender()));
      System.out.println("下面是年齡大於 24歲且月薪在$1,400以上的女PHP程序員:");
      phpProgrammers.stream()
      .filter(ageFilter)
      .filter(salaryFilter)
      .filter(genderFilter)
      .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));

使用limit,限制個數

limit
System.out.println("最前面的3個 Java programmers:");
javaProgrammers.stream()
      .limit(3)
      .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));
      System.out.println("最前面的3個女性 Java programmers:")
      javaProgrammers.stream()
      .filter(genderFilter)
      .limit(3)
      .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));

比排序後選擇第一個/最後一個 更快的是min和max方法:

min 和max
System.out.println("工資最低的 Java programmer:"); 
Person pers = javaProgrammers
      .stream()
      .min((p1, p2) -> (p1.getSalary() - p2.getSalary()))
      .get()
      System.out.printf("Name: %s %s; Salary: $%,d.", pers.getFirstName(), pers.getLastName(), pers.getSalary())
      System.out.println("工資最高的 Java programmer:");
      Person person = javaProgrammers
      .stream()
      .max((p, p2) -> (p.getSalary() - p2.getSalary()))
      .get()

結合 map 方法,我們可以使用 collect 方法來將我們的結果集放到一個字符串,一個 Set 或一個TreeSet中:(有用)

  .map的使用
  System.out.println("將 PHP programmers 的 first name 拼接成字符串:");
  String phpDevelopers = phpProgrammers
      .stream()
      .map(Person::getFirstName)
      .collect(joining(" ; ")); // 在進一步的操作中可以作爲標記(token)   
      System.out.println("將 Java programmers 的 first name 存放到 Set:");
      Set<String> javaDevFirstName = 
      javaProgrammers
      .stream()
      .map(Person::getFirstName)
      .collect(toSet());
     
      System.out.println("將 Java programmers 的 first name 存放到 TreeSet:");
     
      TreeSet<String> javaDevLastName = javaProgrammers
                                       .stream()
                                      .map(Person::getLastName)
                                      .collect(toCollection(TreeSet::new));

在Lambda中還可以將幾個結合起來用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章