第十四章总结

1.1lambda表达式简介

lambda表达式可以用非常少的代码实现抽象方法。lambda表达式不能独立执行,因此必须实现函数式接口,并且会返回一个函数式接口的对象。lambda表达式的语法非常特殊。

()->结果表达式
参数->结果表达式
(参数1,参数2...参数n)->结果表达式

lambda表达式的语法非常抽象,并且有着非常强大的自动化功能,如自动识别泛型、自动数据类型转换等 

例题 


package fourteen;
	interface SayhHi{
		String say();//抽象方法接口
	}
 
 
public class NoParamDemo {
	public static void main(String[] args) {
		//无参数
		//利用匿名内部类补全方法体
		 SayhHi sh1 = new SayhHi() {
			 public String say() {
				 return "这是匿名内部类";
			 }
		 };
		 System.out.print(sh1.say());
	}
 
}

 lambda表达式语法用如下方式理解:

()            ->            {代码块}
这个方法       按照       这样的代码来实现 


package fourteen;
interface sayhi{
	String say();
}
public class NoParamDemo {
	public static void main(String[] args) {
		//使用匿名内部类补全方法体
		sayhi shi = new sayhi() {
			public String say() {
				return"这是匿名内部类";
			}
		};
		System.out.println(shi.say());
	//使用lambda表达式补全方法体
		sayhi sh2 =		()->{
		return"lambda";
		};
		System.out.println(sh2.say());
		}}

例题

package fourteen;
interface AddInt{
	 int add(int a,int b);//抽象方法接口
}
 
public class Prama {
 
	public static void main(String[] args) {
		//有参数
		//利用匿名内部类补全方法体
		AddInt ai1 = new AddInt() {
			 public int add(int a,int b){
				 return a+b;
			 }
		 };
		 System.out.println("匿名内部类:"  + ai1.add(3, 5));
		 //利用lambda表达式补全方法体
		 AddInt ai2=( a, b) -> {
			 return a+b ;
		 };
		 System.out.println("lambda表达式:"+ai2.add(3, 5));
		 
	}
 
}


package fourteen;
interface CheckGrade{
	String check(int grade);//查询成绩结果
}
public class GradeDemo {
	public static void main(String[] args) {
		CheckGrade g =(n)->{	//lambda表达式实现代码块
			if(n>=90&&n<=100) {		//如果成绩在90~100
				return "成绩为优";		//输出成绩为优
			}else if(n>=80&&n<90) {		//如果成绩在80~90
				return "成绩为良";		//输出成绩为良
			}else if(n>=60&&n<80) {		//如果成绩在60~79
				return"成绩为中";		//输出成绩为中	
			}else if (n>0&&n<60) {	//如果成绩小于60
				return "成绩为差";		//输出成绩为差
			}else {		//其他数字不是有效成绩
				return"成绩无效";		//输出成绩无效
			}
		};				//不要丢掉lambda语句后的分号
		System.out.println(g.check(89));	//输出查询结果
	}
}

引用成员方法:


package fourteen;
 
import java.text.SimpleDateFormat;
import java.util.Date;
interface MetodDemoInterface{	//创建测试接口
		String method(Date date);	//带参数的抽象方法
	}
public class MethodDemo {
	public String format(Date date) {	//格式化方法
		//创建日期格式化对象,并指定日期格式
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		return sdf.format(date);	//返回格式化结果
	}
	public static void main(String[] args) {
		MethodDemo demo =new MethodDemo();	//创建类对象
		MetodDemoInterface im =demo::format;	//引用类对象的方法
		Date date =new Date();	//创建日期对象
		System.out.println("默认格式:"+date);	//输出日期对象默认格式
		System.out.println("接口输出的格式"+im.method(date));//输出经过接口方法处理过的格式
	}
}

2.引用泛型方法


package fourteen;
interface ConIn{    //构造方法接口
    ConDemo action(int i);//调用无参方法
}
public class ConDemo {    //测试类
    public ConDemo() {    //无参构造方法
        System.out.println("无参构造方法");
    }
    public ConDemo(int i) {        //有参构造方法
        System.out.println("有参构造方法"+i);
    }
    public static void main(String[] args) {
        ConIn ci1 = ConDemo::new;//引用ConIn类的构造方法
        ConDemo b=ci1.action(5);//通过无参方法船舰对象
}
}

3.流处理

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

public class Employee { // 员工类
	private String name; // 姓名
	private int age; // 年龄
	private double salary; // 工资
	private String sex; // 性别
	private String dept; // 部门

	// 构造方法
	public Employee(String name, int age, double salary, String sex, String dept) {
		this.name = name;
		this.age = age;
		this.salary = salary;
		this.sex = sex;
		this.dept = dept;
	}

	// 重写此方法,方便打印输出员工信息
	public String toString() {
		return "name=" + name + ", age=" + age + ", salary=" + salary + ", sex=" + sex + ", dept=" + dept;
	}

	// 以下是员工属性的getter方法
	public String getName() {
		return name;
	}

	public int getAge() {
		return age;
	}

	public double getSalary() {
		return salary;
	}

	public String getSex() {
		return sex;
	}

	public String getDept() {
		return dept;
	}

	static List<Employee> getEmpList() { // 提供数据初始化方法
		List<Employee> list = new ArrayList<Employee>();
		// 添加员工数据
		list.add(new Employee("老张", 40, 9000, "男", "运营部"));
		list.add(new Employee("小刘", 24, 5000, "女", "开发部"));
		list.add(new Employee("大刚", 32, 7500, "男", "销售部"));
		list.add(new Employee("翠花", 28, 5500, "女", "销售部"));
		list.add(new Employee("小马", 21, 3000, "男", "开发部"));
		list.add(new Employee("老王", 35, 6000, "女", "人事部"));
		list.add(new Employee("小王", 21, 3000, "女", "人事部"));
		return list;
	}
}

4.Stream接口


package fourteen;
 
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
public class StreamDemo {
	
	public static void main(String[] args) {
	List<Employee> list=Employee.getEmpList();//从employee表拿到list表中的员工表
	Stream<Employee> stream = list.stream();//调用list方法将表转换成流
	//筛选年龄>30岁的员工
	stream=stream.filter(sx-> sx.getAge()>30);//写条件,sx属于临时变量
	//限制条数
	stream = stream.limit(2);
	List<Employee> result = stream.collect(Collectors.toList());//转成List链表
	for (Employee sx : result) {//for循环输出结果
		System.out.println(sx);
		
	}
	}
 
}

5.数据分组


import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
public class GroupDemo {
 
	public static void main(String[] args) {
		// 分组
		List<Employee> list=Employee.getEmpList();//从employee表拿到list表中的员工表
		Stream<Employee> stream = list.stream();//调用list方法将表转换成员工流
		Map<String,List<Employee>> map = //创建map集合存入,String代指dept,list链表指代map集合的value
		stream.collect(Collectors.groupingBy(Employee::getDept));//利用流调用collect方法,分组方法,传入方法
		Set<String> depts = map.keySet();//获取map集合中的部门表
		for(String dept:depts){//for循环一个部门,depts代指部门
			System.out.println(dept+"员工信息如下:");//输出信息
			List<Employee> temp = map.get(dept);//分组列表输出
			for(Employee g : temp){//temp是临时变量
				System.out.println(g);//
			}
			System.out.println();
		}
		
		
 
	}
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值