Java基础之-Lambda表达式 JDK1.8新特性

JDK1.8新特性-Lambda表达式
1、Lambda表达式
Lambda表达式(也称为闭包)是整个Java 8发行版中最受期待的在Java语言层面上的改变,Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码看成数据。Lambda表达式用于简化JAVA中接口式的匿名内部类。被称为函数式接口的概念。函数式接口就是一个具有一个方法的普通接口。像这样的接口,可以被隐式转换为lambda表达式。

语法:
(参数1,参数2…) -> { … }

(1)没有参数时使用Lambda表达式
(2)带参数时使用Lambda表达式
(3)代码块中只一句代码时使用Lambda表达式
(4)代码块中有多句代码时使用Lambda表达式
(5)有返回值的代码块
(6)参数中使用final关键字

2、接口中的默认方法和静态方法

interface A{
public default void print(){}
public static void method(){}
}

默认方法与静态方法并 不 影 响 函数式接口的契约,可以任意使用(1.8之后)

package com.vince;

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

public class LambdaDemo {
	public static void main(String[] args) {
		
//		IEat ieat = new IEatImpl();
//		ieat.eat();
//		
//		IEat ieat2 = new IEat(){
//			public void eat(){
//				System.out.println("eat bnana");
//			}
//		};
//		ieat2.eat();
		
		
		//lambda表达式:
		//好处:1代码更简洁,2,不会单独生成class文件
//		IEat ieat3 = ()->{System.out.println("eat apple bnana");};
		
		//没有参数时使用
//		IEat ieat3 = ()-> System.out.println("eat apple bnana");
//		ieat3.eat();
		
		//带参数时使用,参数的类型可以省略
//		IEat ieat3 = (thing,name) -> System.out.println("eat..."+thing+"..."+name);
//		ieat3.eat("apple","大冰");
		
		//带参数时使用,参数的类型可以省略,代码块中有多行代码
//		IEat ieat3 = (thing,name) -> {
//			System.out.println("eat..."+thing);
//			System.out.println(name);
//		};
//		ieat3.eat("apple","大冰");
		
		//带返回值的方法
//		IEat ieat3 = (thing,name)->{
//			System.out.println(name+ " eat "+thing);
//			return 10;
//		};
		
		//带返回值 的方法中只有一句实现代码
		IEat ieat3 = (final String thing,final String name)-> thing==null?1:0;
		ieat3.eat("apple", "大冰");
		
		Student[] students = {
				new Student("张三",18),
				new Student("张四",28),
				new Student("张一",15)};
		
//		Arrays.sort(students,new Comparator<Student>() {
//			public int compare(Student o1, Student o2) {
//				return o1.getAge()-o2.getAge();
//			};
//		});
		
//		Comparator<Student> c = (o1,o2)->o1.getAge()-o2.getAge();
		Arrays.sort(students,(o1,o2)-> o1.getAge()-o2.getAge());
		System.out.println(Arrays.toString(students));
		
		IEat.method();
	}
}


//只有一个抽象方法的接口
interface IEat{
	public int eat(final String thing,final String name);
	public default void print(){
		System.out.println("print test");
	}
	public static void method(){
		System.out.println("static method..");
	}
}

//class IEatImpl implements IEat{
//	public void eat(String thing){
//		System.out.println("eat--"+thing);
//	}
//}
package com.vince;

public class Student {

	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	
}

前几个博客的总结题目 看看
1、字符串操作
2、程序国际化
3、Math与Random类
4、日期操作类
5、对象比较器
6、对象的克隆
7、System与 Runtime类
8、数字处理工具类
9、MD5工具类
10、数据结构之二叉树实现
11、JDK1.8新特性

猜你喜欢

转载自blog.csdn.net/C_time/article/details/89407750