1求数组元素的最大值
使用supplier接口作为方法参数类型,通过lambda表达式求出int数组中的最大值

package com.yzy.java8;

import java.util.Arrays;
import java.util.function.Supplier;

/**
 * @className Test1.java
 * @author yangsir
 * @version V1.0
 * @date 2019年8月16日-下午7:03:52
 * @description 1求数组元素的最大值 使用supplier接口作为方法参数类型,通过lambda表达式求出int数组中的最大值
 */
public class Test1 {
	public static void main(String[] args) {
		int[] n = { 1, 34, 5, 56, 67 };
		Arrays.sort(n);// 使用工具类对数组进行排序
		Supplier<Integer> sup = () -> n[n.length - 1];// 使用lambda表达式,输出最后一个元素,Lambda表达式必须实现接口中的抽象方法,所以不传参数
		System.out.println(getMax(sup));
	}

	public static int getMax(Supplier<Integer> sup) {
		return sup.get();// 直接返回supplier里面的get方法来放回值
	}
}

2.消费型接口Person的输出姓名

public class Person {
	private String name;
	private int age;

	public Person() {
		super();
	}

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = 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 "Person [name=" + name + ", age=" + age + "]";
	}

}

package com.yzy.java8;

import java.util.function.Consumer;

/**
 * @className Test2.java
 * @author yangsir
 * @version V1.0
 * @date 2019年8月16日-下午7:11:06
 * @description 消费型接口Person的输出姓名
 */
public class Test2 {
	public static void main(String[] args) {
		Person p = new Person("张三", 23);// 创建Person对象
		Consumer<Person> con = (x) -> System.out.println(x.getName());// 使用Consumer消费者接口和Lambda,Lambda表达式必须实现接口中的抽象方法,所以传一个参数
		getName(con, p);
	}

	public static void getName(Consumer<Person> con, Person p) {
		con.accept(p);// 直接调用用Consumer中的accept方法来接收即可
	}
}

3.集合中的元素按年龄升,当年龄相等按姓名降。然后输出list。(lambda实现)
自查API:Collections.sort(List list, Comparator<? super T> c){

          }
package com.yzy.java8;

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

/**
 * @className Test3.java
 * @author yangsir
 * @version V1.0
 * @date 2019年8月16日-下午7:20:57
 * @description 集合中的元素按年龄升,当年龄相等按姓名降。然后输出list。(lambda实现)
 */
public class Test3 {
	public static void main(String[] args) {
		// 创建一个集合然后添加元素
		List<Person> list = new ArrayList<Person>();
		list.add(new Person("a", 23));
		list.add(new Person("c", 24));
		list.add(new Person("e", 23));
		list.add(new Person("d", 23));
		// 查看Collections的API可知上面说 列表中的所有元素必须实现Comparable接口
		Collections.sort(list, (x, y) -> {// 在Lambda表达式中传入两个比较的元素并实现
			if (x.getAge() != y.getAge())
				return x.getAge() - y.getAge();
			else
				return x.getName().compareTo(y.getName());
		});
		System.out.println(list);
	}
}

4.生成随机数
List list = getNum(5, )调用
生成随机数的方法
public List getNum(int num ,Supplier su){

}

package com.yzy.java8;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.function.Supplier;

/**
 * @className Test4.java
 * @author yangsir
 * @version V1.0
 * @date 2019年8月16日-下午7:34:35
 * @description List<Integer> list = getNum(5, )调用 生成随机数的方法 public List<Integer>
 *              getNum(int num ,Supplier<Integer> su){
 * 
 *              }
 */
public class Test4 {
	public static void main(String[] args) {
		Supplier<Integer> su = () -> new Random().nextInt(100);// 因为Supplier只有一个构造方法,Lambda表达式必须实现接口中的抽象方法,所以不传参数
		List<Integer> list = getNum(5, su);// 调用
		System.out.println(list);
	}

	public static List<Integer> getNum(int num, Supplier<Integer> su) {// 照题目要求定义方法
		List<Integer> list = new ArrayList<Integer>();// 创建一个集合作为返回值
		for (int i = 0; i < num; i++) {// 循环num次
			list.add(su.get());// 每次都添加su.get()里面的元素
		}
		return list;

	}
}