Java 是一流的面向对象语言,除了部分简单数据类型,Java 中的一切都是对象,即使数组也是一种对象,每个类创建的实例也是对象。在 Java 中定义的函数或方法不可能完全独立,也不能将方法作为参数或返回一个方法给实例。
在java中,如果想要把某功能传递给某方法,需要写匿名类。
写一些代码的时候用Lambda 表达式极其方便。本质上就是匿名函数,很好理解,是一段可以传递的代码,使java的表达能力得到提升,表现为更加紧凑的代码风格。
示例:下面是对于排序的一种Lambda 表达式应用。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Comparator;
public class Demo {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("b");
list.add("a");
list.add("c");
list.add("d");
list.sort( (o1,o2)->{ return o1.compareTo(o2); } );
}
}
Lambda 表达式简介
lambda表达式 又对匿名内部类语法进行了简化,直接将接口中的方法实现作为参数传递,lambda表达式又称为函数式编程
语法糖 可以使用更少的代码来实现同样的功能。
以下是一些 Lambda 表达式的例子:
无参数,无返回值,lambda 体中只有一行代码时,{}可以忽略
() -> System.out.println(“Hello World”);
无参数,有返回值
() -> { return 3.1415 };
有参数,无返回值
(String s) -> { System.out.println(s); }
有一个参数,无返回值
s -> { System.out.println(s); }
有多个参数,有返回值
(int a, int b) -> { return a + b; }
有多个参数,表达式参数类型可以不写,jvm 可以根据上下文进行类型推断
(a, b) -> { return a - b; }
功能接口只能有一个抽象方法。如果我们尝试在其中添加一个抽象方法,则会抛出编译时错误。
public interface Shape {
void area(int a,int b);
}
Shape d = (a, b)->{System.out.println(a+b);};
d.area(1, 2);
遍历输出
用 lambada 表达示遍历输出只需要一行即可。
//普通方式 ListStream流list = Arrays.asList(1, 2, 3, 4, 5, 6, 7); for (Integer n : list) { System.out.println(n); } // 使用 -> 的 Lambda 表达式 list.forEach(n -> System.out.println(n));
Stream 是 Java8 的新特性,它允许你以声明式的方式处理数据集合,可以把它看作是遍历数据集的高级迭代器。
Stream提供了对集合元素更加丰富的操作(中间操作,终端操作)
实现一个操作(for 循环)。同时可以将这些操作链接起来,达到一种流水线式的效果:
集合–>流–>filter–>流–>sorted–>流–>map–>result
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamDemo {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("b");
list.add("a");
list.add("c");
list.add("d");
// 把集合或数组中的元素添加到Stream对象中去.
Stream stream = list.stream();
List list1 = stream.filter( (e)->{ return e.equals("c"); }) //中间操作
.collect(Collectors.toList()); //终端操作
System.out.println(list1);//[c]
System.out.println(list);
}
}



