[ Java ] 最通俗易懂的 Java8 新特性 Lambda表达式讲解

Lambda 表达式


一、基础语法

(参数列表) -> { 表达式 }

二、lambda表达式的重要特征:

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
(int a, int b) -> {
	 System.out.println(a+b);
}

简写为

(a,b) -> {
	 System.out.println(a+b);
}
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
(a) -> {
	 System.out.println(a);
}

简写为

a -> {
	 System.out.println(a);
}
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
(a,b) -> {
	 System.out.println(a+b);
}

简写为

(a,b) -> System.out.println(a+b)
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
(a,b) -> {
	 return a+b;
}

简写为

(a,b) -> a+b

二、lambda 表达式实例

接口中若只提供一个方法,除此之外没有任何的其他方法定义,这样的接口称为函数式接口,而只有函数式接口才可以被Lambda表达式所使用。


0.接口的简单实现

  • 不使用lambda表达式实现
interface IMessage{
	public void send(String msg);
}
public class Hello {
	public static void main(String[] args) {
		IMessage iMsg = new IMessage() {
			
			@Override
			public void send(String msg) {
				// TODO Auto-generated method stub
				System.out.println(msg);
			}
		};
		iMsg.send("发送消息!");
	}
}
  • 使用lambda表达式实现
@FunctionalInterface
interface IMessage{
	public void send(String msg);
}
public class Hello {
	public static void main(String[] args) {
		IMessage iMsg = msg -> System.out.println(msg);
		iMsg.send("发送消息!");
	}
}

1. 集合遍历

// 集合遍历
    private static void out(){
        ArrayList<Integer> list = new ArrayList<>();
        Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);
        // 遍历输出
        list.forEach(System.out::println);
        // 输出所有偶数
        list.forEach(ele -> {
            if(ele % 2 == 0){
                System.out.println(ele);
            }
        });
    }

2. 集合排序

// ArrayList 排序
    private static void listSort(){
        ArrayList<Person> list = new ArrayList<>();
        list.add(new Person("aaa",23));
        list.add(new Person("bbb",12));
        list.add(new Person("ccc",45));
        list.add(new Person("ddd",36));
        list.add(new Person("eee",19));
        list.add(new Person("fff",19));

        list.sort((o1,o2)-> o1.age - o2.age);
        System.out.println(list);
    }
    // TreeSet 排序
    private static void setSort(){
//        TreeSet<Person> set = new TreeSet<>((o1,o2)-> o1.age - o2.age);
        TreeSet<Person> set = new TreeSet<>((o1,o2)-> {
            if(o1.age >= o2.age) {
                return -1;
            } else {
                return 1;
            }
        });
        set.add(new Person("aaa",23));
        set.add(new Person("bbb",12));
        set.add(new Person("ccc",45));
        set.add(new Person("ddd",36));
        set.add(new Person("eee",19));
        set.add(new Person("fff",19));

        System.out.println(set);
    }

3.删除集合中符合条件的元素

// ArrayList 删除元素
    private static void listRemove(){
        ArrayList<Person> list = new ArrayList<>();
        list.add(new Person("aaa",23));
        list.add(new Person("bbb",12));
        list.add(new Person("ccc",45));
        list.add(new Person("ddd",36));
        list.add(new Person("eee",19));
        list.add(new Person("fff",19));

        list.removeIf(ele-> ele.age > 40);
        System.out.println(list);
    }

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页