lambda表达式是java SE 8新推出的概念,是新增泛型和注解之后最大的一次改变。这个表达式
Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及 java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。 总的来说,lambda表达式和 stream 是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化。 在本文中,我们将从简单到复杂的示例中见认识lambda表达式和stream的强悍
- Lambda表达式(lambda expression)是一个匿名函数,由数学中的λ演算而得名。在Java 8中可以把Lambda表达式理解为匿名函数,它没有名称,但是有参数列表、函数主体、返回类型等。
2 .Lambda表达式正是为了简化这些步骤出现的,它使代码变得清晰易懂。
- 只要是有内部类的代码块,都可以转化成Lambda表达式
基本语法:
(parameters) -> expression
或
(parameters) ->{ statements; }
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
simple
这里有一个集合
public void mode() {
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(4);
}
- 原来的表达式
for (int i = 0; i < arrayList.size(); i++) {
System.out.println(i);
}
lambda
arrayList.forEach(p -> System.out.println(p));
我们通过表达式 p-> syso 的方式直接就输出了arrayList中的每个元素。
- 再看创建线程
原来的方式
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("");
}
});
现在
new Thread(() -> System.out.println("")).start();
- 排序
原来的方式
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
};
Arrays.sort(players, comparator);
lambda拉姆达表达式一行代码
arrayList.forEach(p -> System.out.println(p));
stream操作符
Stream是对集合的包装,通常和lambda一起使用。 使用lambdas可以支持许多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等
stream filter过滤了大于2的数据。
arrayList.stream().filter(p -> p > 2).forEach(p -> System.out.println(p));
limit操作符,filter只显示前三个的数据
arrayList.stream().limit(3).forEach(p -> System.out.println(p));
网友评论