美文网首页
lambda表达式

lambda表达式

作者: 金馆长说 | 来源:发表于2018-08-05 16:31 被阅读8次

掘金参考

lambda表达式是java SE 8新推出的概念,是新增泛型和注解之后最大的一次改变。这个表达式

Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及 java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。 总的来说,lambda表达式和 stream 是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化。 在本文中,我们将从简单到复杂的示例中见认识lambda表达式和stream的强悍

  1. Lambda表达式(lambda expression)是一个匿名函数,由数学中的λ演算而得名。在Java 8中可以把Lambda表达式理解为匿名函数,它没有名称,但是有参数列表、函数主体、返回类型等。

2 .Lambda表达式正是为了简化这些步骤出现的,它使代码变得清晰易懂。

  1. 只要是有内部类的代码块,都可以转化成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);
}
  1. 原来的表达式
 for (int i = 0; i < arrayList.size(); i++) {
            System.out.println(i);
        }

lambda

  arrayList.forEach(p -> System.out.println(p));

我们通过表达式 p-> syso 的方式直接就输出了arrayList中的每个元素。

  1. 再看创建线程
    原来的方式
  Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("");
            }
        });

现在

 new Thread(() -> System.out.println("")).start();
  1. 排序

原来的方式

 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));

相关文章

网友评论

      本文标题:lambda表达式

      本文链接:https://www.haomeiwen.com/subject/bivbvftx.html