一边学习一边记录,并且附上看过的博客链接。
https://www.cnblogs.com/jacksontao/p/8608291.html
https://www.cnblogs.com/aoeiuv/p/5911692.html 挺好的
首先 default 关键字:
使用次关键字可以在接口中定义非抽象方法(拥有方法体)
Lambda 表达式:
重:能够接收Lambda表达式的参数类型,是一个只包含一个方法的接口。只包含一个方法的接口称之为“函数接口”。
入门链接:https://www.cnblogs.com/yulinfeng/p/8452379.html
public class Lambda{
public interface ILambda{ //搞一个接口
boolean test(int x);
}
@Test
public void A() {
/**
*
匿名内部类普通调用
func(new ILambda() {
@Override
public boolean test(int x) {
System.out.println("这个是普通调用接口"+x);
return true;
}
});
*/
/**
* Lambda表达式写法
* finc((参数) ->{函数主提}) 如果函数主体没有什么代码可以不使用{}
*/
boolean a = func((int x)-> {
System.out.println("这个是Lambda调用接口"+ ++x);
return true;
});
System.out.println(a);
}
public boolean func(ILambda iLambda) {
int x = 1;
return iLambda.test(x);
}
}
流 Stream:
对一个集合进行遍历操作之前使用的方法是for或者foreach 循环遍历。如今我们可以使用集合的forEach方法配合Lambda 表达式来进行遍历
实际使用方法和普通遍历并没有实质区别。
代码:
List<Person> javaProgrammers = new ArrayList<Person>();
javaProgrammers.add(new Person("Elsdon", "Jaycob", "Java programmer", "male",
43, 2000));
javaProgrammers.add(new Person("Tamsen", "Brittany", "Java programmer",
"female", 23, 1500));
javaProgrammers.add(new Person("Floyd", "Donny", "Java programmer", "male", 33,
1800));
javaProgrammers.add(new Person("Sindy", "Jonie", "Java programmer", "female",
32, 1600));
javaProgrammers.add(new Person("Vere", "Hervey", "Java programmer", "male", 22,
1200));
javaProgrammers.add(new Person("Maude", "Jaimie", "Java programmer", "female",
27, 1900));
javaProgrammers.add(new Person("Shawn", "Randall", "Java programmer", "male",
30, 2300));
javaProgrammers.add(new Person("Jayden", "Corrina", "Java programmer", "female",
30, 1700));
javaProgrammers.add(new Person("Palmer", "Dene", "Java programmer", "male", 33,
2000));
javaProgrammers.add(new Person("Addison", "Pam", "Java programmer", "female",
30, 1300));
List<Person> lis = new LinkedList<Person>(); //新创建的空集合
javaProgrammers.forEach((m) -> { //javaProgrammers集合调用forEach方法配合Lambda 表达式((参数) -> 逻辑)
if(m.getSalary() >=40) {
Person pera = new Person();
pera.setAge(m.getAge());
pera.setFirstName(m.getFirstName());
lis.add(pera); //将对象数据放入空集合中
}
});
System.out.println(lis.toString()); //打印
Stream 进行分组操作
//Person 为返回的实体类对象 、:: 后面getSalary为该对象中salary变量的getSalary方法不要()
Map<Integer, List<Person>> map = (javaProgrammers.stream().collect(Collectors.groupingBy(Person :: getSalary)));
System.out.println(map.toString());
LAMBDA表达式排序
//list 为要排序的集合 (a,b)为集合中的对象(此处省略了写返回对象) 使用.compareTo方法进行比较排序
list.sort((a ,b)->a.getAddTime().compareTo(b.getAddTime()));