lambda表达式一(入门)

概念

Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。

JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。

实例一:

public class LambdaTest2 {

    public static void main(String[] args) {
        LambdaTest2 lambdaTest = new LambdaTest2();
        lambdaTest.test2();
    }


    public void test1() {
        Comparator<String> comparable = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return Integer.compare(o1.length(), o2.length());
            }
        };

        TreeSet<String> treeSet = new TreeSet<>(comparable);
        treeSet.add("zhangsan");
        treeSet.add("lisi");
        treeSet.add("wangwu");
        treeSet.add("zhaoliu");
        for (String s : treeSet) {
            System.out.println(s);
        }
    }


    public void test2() {
        Comparator<String> comparable = (x, y) -> Integer.compare(x.length(), y.length());

        TreeSet<String> treeSet = new TreeSet<>(comparable);
        treeSet.add("zhangsan");
        treeSet.add("lisi");
        treeSet.add("wangwu");
        treeSet.add("zhaoliu");
        for (String s : treeSet) {
            System.out.println(s);
        }
    }

}

实例二:

package com.demo.test;

@Setter
@Getter
@ToString
public class User {

    private Integer id;

    private String name;

    private String password;

    private float salary;


    public User(){
        
    }

    public User(int id, String name, String password, float salary) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.salary = salary;
    }

}

package com.demo.test;

public interface MyPredicate<T> {

    boolean check(T t);

}
package com.demo.test;

import java.util.ArrayList;
import java.util.List;

public class LambdaTest {

    public static void main(String[] args) {
        LambdaTest test = new LambdaTest();
        test.test1();
        test.test2();
    }

    /**
     * 写法一:普通的实现方式
     */
    public void test1() {
        List<User> userList = this.createUserData();

        List<User> resultList = this.filterUser(userList, new MyPredicate<User>() {
            @Override
            public boolean check(User user) {
                return user.getSalary() > 1000f;
            }
        });

        for (User user : resultList) {
            System.out.println(user);
        }
    }

    /**
     * 写法二:lambda表达式实现方式
     */
    public void test2() {
        List<User> userList = this.createUserData();

        List<User> resultList = this.filterUser(userList, (user) -> user.getSalary() > 1000f);

        for (User user : resultList) {
            System.out.println(user);
        }
    }

    /**
     *
     * @param userList
     * @param myPredicate
     * @return
     */
    public List<User> filterUser(List<User> userList, MyPredicate<User> myPredicate) {
        List<User> resultList = new ArrayList<>();
        for (User user : userList) {
            if (myPredicate.check(user)) {
                resultList.add(user);
            }
        }

        return resultList;
    }

    /**
     * 创建数据
     * @return
     */
    public List<User> createUserData() {
        List<User> userList = new ArrayList<>();
        userList.add(new User(1, "zhangsan", "admin", 999f));
        userList.add(new User(2, "lisi", "admin", 899f));
        userList.add(new User(3, "wangwu", "admin", 1999f));
        userList.add(new User(4, "zhaoliu", "admin", 2999f));
        userList.add(new User(5, "laoqi", "admin", 799f));
        return userList;
    }

}


版权声明:本文为shushan452原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。