Lambda表达式语法:
Lambda表达式在Java语言中引入了一个操作符**“->”**,该操作符被称为Lambda操作符或箭头操作符。它将Lambda分为两个部分:
- 左侧:指定了Lambda表达式需要的所有参数
- 右侧:制定了Lambda体,即Lambda表达式要执行的功能。
(1)语法格式一:无参,无返回值,Lambda体只需一条语句。如下:
@Test
public void test01(){
Runnable runnable=()-> System.out.println("Runnable 运行");
runnable.run();//结果:Runnable 运行
}
(2)语法格式二:Lambda需要一个参数,无返回值。如下:
@Test
public void test02(){
Consumer<String> consumer=(x)-> System.out.println(x);
consumer.accept("Hello Consumer");//结果:Hello Consumer
}
(3)语法格式三:Lambda只需要一个参数时,参数的小括号可以省略,如下:
public void test02(){
Consumer<String> consumer=x-> System.out.println(x);
consumer.accept("Hello Consumer");//结果:Hello Consumer
}
(4)语法格式四:Lambda需要两个参数,并且Lambda体中有多条语句。
@Test
public void test04(){
Comparator<Integer> com=(x, y)->{
System.out.println("函数式接口");
return Integer.compare(x,y);
};
System.out.println(com.compare(2,4));//结果:-1
}
(5)语法格式五:有两个以上参数,有返回值,若Lambda体中只有一条语句,return和大括号都可以省略不写
@Test
public void test05(){
Comparator<Integer> com=(x, y)-> Integer.compare(x,y);
System.out.println(com.compare(4,2));//结果:1
}
(6)Lambda表达式的参数列表的数据类型可以省略不写,因为JVM可以通过上下文推断出数据类型,即“类型推断”
@Test
public void test06(){
Comparator<Integer> com=(Integer x, Integer y)-> Integer.compare(x,y);
System.out.println(com.compare(4,2));//结果:1
}
接口:
package com.sunjob.s95rabc.Lambda;
/**
* @author Milo
* @date now
*/
public interface Methods
{
int add(int x, int y);
}
接口实现类:
package com.sunjob.s95rabc.Lambda;
/**
* @author Milo
* @date now
*/
public class MethodsImpl implements Methods
{
@Override
public int add(int x, int y)
{
return x+y;
}
}
运行类:
package com.sunjob.s95rabc.Lambda;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
/**
* @author Milo
* @date now
*/
public class Run
{
public static void main(String[] args)
{
Methods methods= (int x,int y) -> { return x+y; };//加
Methods m1= (int x,int y) -> { return x-y; };//减
Methods m2= (int x,int y) -> { return x*y; };//乘
Methods m4= (int x,int y) -> { return x/y; };//除
Consumer s = (x)-> System.out.println(x);
final Object a =null;
final Object b = null;
BiConsumer si = (x,y)->
{
System.out.println(x.toString()+y.toString());
};
}
}
LIst:运用lamdba表达式
参考指南:
学到ArrayList.forEach(System.out::println)我人傻了_热情的rhew的博客-CSDN博客
public static void main(String[] args) {
List<Object> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
list.forEach(System.out::println);//学习这句话
}
public static void main(String[] args) {
List<Object> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
Consumer<Object> consumer = s-> System.out.println(s);//Lamdba表达式
list.forEach(consumer);
//list.forEach(s-> System.out.println(s));//Lamdba表达式可以直接做参数
//list.forEach(System.out::println);
}
ListTest:
package com.sunjob.s95rabc.Lambda;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* @author Milo
* @date now
*/
public class ListTest
{
public static void main(String[] args) {
List<Integer> a = new ArrayList<>();
for (int i = 0; i <10 ; i++) {
a.add(i);
}
System.out.println(a);
/*for (int i = 0; i < a.size(); i++) {
if(a.get(i)>5)
{
a.remove(i);
}
}*/
Iterator it = a.iterator();
while (it.hasNext())
{
int e = (int)it.next();
if(e>5)
{
it.remove();
}
}
/* a.forEach((x)->{
if((int)x>5)
{
// a.remove(x);
}
});*/
a.forEach((x)->{
if((int)x >5)
{
System.out.println("数据为"+x);
}
});
System.out.println(a);
}
}
运行结果:
package com.sunjob.s95rabc.Lambda;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* @author Milo
* @date now
*/
public class ListTest1
{
public static void main(String[] args) {
List<Integer> a = new ArrayList<>();
for (int i = 0; i <10 ; i++) {
a.add(i);
}
System.out.println(a);
/*for (int i = 0; i < a.size(); i++) {
if(a.get(i)>5)
{
a.remove(i);
}
}*/
/* a.forEach((x)->{
if((int)x>5)
{
// a.remove(x);
}
});*/
a.forEach((x)->{
if((int)x >5)
{
System.out.println("数据为"+x);
}
});
System.out.println(a);
}
}
运行结果:
实体类:
package com.sunjob.s95rabc.Lambda;
/**
* @author Milo
* @date now
*/
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 +
'}';
}
}
测试:
package com.sunjob.s95rabc.Lambda;
import java.util.*;
import java.util.function.BiFunction;
import java.util.function.Function;
/**
* @author Milo
* @date now
*/
public class LambdaTest
{
public static void main(String[] args)
{
List<Student> students = new ArrayList<>();
for (int i = 0; i < 10; i++)
{
Student stu = new Student();
stu.setName("编号:"+i+"");
stu.setAge(new Random().nextInt(100));
students.add(stu);
}
System.out.println(students);
Collections.sort(students,(a,b)->{
return a.getAge()>b.getAge() ?1:-1;
});
System.out.println(students);
//s只是一个对象要转换成list
Function f = (s)->
{
List b = new ArrayList();
List<Student> a = (List<Student>)s;
for (int i = 0; i < a.size(); i++)
{
if(a.get(i).getAge()>50)
{
b.add(a.get(i));
}
}
return b;
};
List<Student> s = (List<Student>)f.apply(students);
System.out.println(s);
}
}