Lambda表达式

Posted zhz-8919

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lambda表达式相关的知识,希望对你有一定的参考价值。

1.函数式接口:只有一个抽象方法的接口叫函数式接口

存在的意义:方法里面不能直接传方法,所以通过传函数式接口的方式可以间接的实现方法的传递
lambda表达式:对匿名内部类的一种简单的写法常用于实现函数式接口

1.lambda实现Runnable

// Java 8 之前:
    new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Before Java8, too much code for too little to do");
    }
    }).start();
// Java 8 方式:
    new Thread(()->System.out.println("In Java8, Lambda expression rocks !!")).start();

2.lambda实现Compare

        List<Entry<Integer, User>> list = new ArrayList<>();
        for (Entry<Integer, User> entry: map.entrySet())
            list.add(entry);
        list.sort((Entry<Integer, User> o1, Entry<Integer, User> o2) -> {
            return o1.getValue().getAge() - o2.getValue().getAge();
        });

3.steam中Map的用法:对每个值做相应的操作

List<String> G7 = Arrays.asList("USA", "Japan", "France", "Germany", "Italy", "U.K.","Canada");
String G7Countries = G7.stream().map(x -> x.toUpperCase()).collect(Collectors.joining(", "));

lambda表达式不能修改局部变量,但是可以访问

List<Integer> primes = Arrays.asList(new Integer[]{2, 3,5,7});
int factor = 2;
primes.forEach(element -> { factor++; }); // 错误
primes.forEach(element -> {System.out.println(2)}); // 正确

4.stream中的过滤并返回新的集合

// 创建一个字符串列表,每个字符串长度大于 2
List costBeforeTax = Arrays.asList("abc","bcd","defg","jk");
List<String> filtered = strList.stream().filter(x -> x.length()> 2).collect(Collectors.toList()); // filter()过滤集合并返回stream,collect()返回集合
System.out.printf("Original List : %s, filtered list : %s %n", strList, filtered);

以上是关于Lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章

JAVA由一个将JSONArray转成Map的需求引发的lambda语法的学习

函数式编程

C# fun

Lambda表达式

Lambda表达式

Lambda表达式