jdk1.8 Lambda表达式的使用

参考博文
https://www.cnblogs.com/franson-2016/p/5593080.html

Lambda表达式的语法
基本语法:
(parameters) -> expression

(parameters) ->{ statements; }

下面是Java lambda表达式的简单例子

// 1. 不需要参数,返回值为 5  
() -> 5  
  
// 2. 接收一个参数(数字类型),返回其2倍的值  
x -> 2 * x  
  
// 3. 接受2个参数(数字),并返回他们的差值  
(x, y) -> x – y  
  
// 4. 接收2个int型整数,返回他们的和  
(int x, int y) -> x + y  
  
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
(String s) -> System.out.print(s)

详细示例1

package pojo;

import java.util.Arrays;
import java.util.List;

public class Test_1 {
    public static void main(String[] args) {
        String[] atp = {"Rafael Nadal", "Novak Djokovic",
                "Stanislas Wawrinka",
                "David Ferrer", "Roger Federer",
                "Andy Murray", "Tomas Berdych",
                "Juan Martin Del Potro"};
        List<String> players = Arrays.asList(atp);

        // 以前的循环方式
        for (String player : players) {
            System.out.println(player + "; ");
        }

        //使用 lambda 表达式以及函数操作(functional operation)
        players.forEach((a) ->
                {
                    System.out.println(a + "; ");
                }
        );
    }
}

详细示例2

package pojo;

public class Test_2 {
    public static void main(String[] args) {
        // 1.1使用匿名内部类
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello world !");
            }
        }).start();

        //1.2使用 lambda expression
        new Thread(() -> System.out.println("Hello world !")).start();
    }
}

详细示例3

package pojo;

import java.util.Arrays;
import java.util.Comparator;

public class Test_3 {
    public static void main(String[] args) {
        String[] players = {"a", "c",
                "e", "f",
                "z", "w",
                "b", "W",
                "S", "E"};

        // 1.1 使用匿名内部类根据 name 排序 players
        Arrays.sort(players, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                return (s1.compareTo(s2));
            }
        });

        //使用 lambda expression 方式1
        Arrays.sort(players, (String s1, String s2) -> s1.compareTo(s2));

        //使用 lambda expression 方式2
        Comparator<String> paixu = (String s1, String s2) -> s1.compareTo(s2);
        Arrays.sort(players, paixu);

        System.out.println(Arrays.asList(players));
    }
}

详细示例4

package pojo;

import java.util.ArrayList;
import java.util.function.Consumer;
import java.util.function.Predicate;

class Person {
    private String firstName, lastName, job, gender;
    private int salary, age;

    public Person(String firstName, String lastName, String job,
                  String gender, int age, int salary) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.gender = gender;
        this.age = age;
        this.job = job;
        this.salary = salary;
    }

    public Person() {
    }
}

public class Test_4 {
    public static void main(String[] args) {
        ArrayList<Person> javaProgrammers = new ArrayList<Person>() {
            {
                add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000));
                add(new Person("Tamsen", "Brittany", "Java programmer", "female", 23, 1500));
                add(new Person("Floyd", "Donny", "Java programmer", "male", 33, 1800));
                add(new Person("Sindy", "Jonie", "Java programmer", "female", 32, 1600));
                add(new Person("Vere", "Hervey", "Java programmer", "male", 22, 1200));
                add(new Person("Maude", "Jaimie", "Java programmer", "female", 27, 1900));
                add(new Person("Shawn", "Randall", "Java programmer", "male", 30, 2300));
                add(new Person("Jayden", "Corrina", "Java programmer", "female", 35, 1700));
                add(new Person("Palmer", "Dene", "Java programmer", "male", 33, 2000));
                add(new Person("Addison", "Pam", "Java programmer", "female", 34, 1300));
            }
        };

        ArrayList<Person> phpProgrammers = new ArrayList<Person>() {
            {
                add(new Person("Jarrod", "Pace", "PHP programmer", "male", 34, 1550));
                add(new Person("Clarette", "Cicely", "PHP programmer", "female", 23, 1200));
                add(new Person("Victor", "Channing", "PHP programmer", "male", 32, 1600));
                add(new Person("Tori", "Sheryl", "PHP programmer", "female", 21, 1000));
                add(new Person("Osborne", "Shad", "PHP programmer", "male", 32, 1100));
                add(new Person("Rosalind", "Layla", "PHP programmer", "female", 25, 1300));
                add(new Person("Fraser", "Hewie", "PHP programmer", "male", 36, 1100));
                add(new Person("Quinn", "Tamara", "PHP programmer", "female", 21, 1000));
                add(new Person("Alvin", "Lance", "PHP programmer", "male", 38, 1600));
                add(new Person("Evonne", "Shari", "PHP programmer", "female", 40, 1800));
            }
        };

        //显示姓名
        javaProgrammers.forEach((aa) -> {
            System.out.printf("%s %s; ", aa.getFirstName(), aa.getLastName());
        });

        //加薪 5%
        javaProgrammers.forEach((aa) -> {
            aa.setSalary(aa.getSalary() / 100 * 5 + aa.getSalary());
        });

        //显示姓名 薪水
        javaProgrammers.forEach((aa) -> {
            System.out.println(aa.getFirstName() + "  " + aa.getSalary());
        });

        //过滤
        phpProgrammers.stream().filter(new Predicate<Person>() {
            @Override
            public boolean test(Person person) {
                return person.getSalary() > 1400;
            }
        }).forEach(new Consumer<Person>() {
            @Override
            public void accept(Person person) {
                System.out.println(person);
            }
        });

        System.out.println();

        //实现同上的效果
        phpProgrammers.stream().filter((aa) -> (aa.getSalary() > 1400)).forEach((bb) -> System.out.println(bb));

        //多个过滤器
        Predicate<Person> filter_1 = (a) -> (a.getSalary() > 1400);
        Predicate<Person> filter_2 = (a) -> {
            return "female".equals(a.getGender());
        };
        Predicate<Person> filter_3 = (a) -> {
            return a.getAge() > 25;
        };
        phpProgrammers.stream().filter(filter_1).filter(filter_2).filter(filter_3).forEach((p) -> {
            System.out.println(p);
        });
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值