美文网首页
Java --lambda 表达式

Java --lambda 表达式

作者: superHang | 来源:发表于2020-04-20 23:20 被阅读0次

使用

(params) -> expression
(params) -> statement
(params) -> { statements }

注意:
1.lambda表达式有个限制,那就是只能引用 final 或 final 局部变量,这就是说不能在lambda内部修改定义在域外的变量。

List<Integer> primes = Arrays.asList(new Integer[]{2, 3,5,7});
int factor = 2;
primes.forEach(element -> { factor++; }); 

Compile time error : "local variables referenced from a lambda expression must be final or effectively final"

1.列表操作

1.简单循环列表

//初始化数据
   List<Books> books=Arrays.asList(new Books("西游记",15),new Books("java",20),
        new Books("金瓶梅",10),new Books("水湖庄",30));
  //循环书名
 books.forEach(books1 -> System.out.println("书名:"+books1.getName()+" 价格:"+books1.getPrice()));
image.png

2.过滤数据

//过滤价格
 List<Books> highPrice=books.stream().filter(books1 -> books1.getPrice()>15).collect(Collectors.toList());

 highPrice.forEach(highbook-> System.out.println("价格高于15的书:"+highbook.getName()));
image.png

3.排序

 System.out.println("从低到高排序");
List<Books> sortBooks=books.stream().sorted(Comparator.comparing(Books::getPrice)).collect(Collectors.toList());

sortBooks.forEach(book-> System.out.printf("书名:%s,价格:%s\n",book.getName(),book.getPrice()));

System.out.println("从高到低排序");
 List<Books> sortBooks2=books.stream().sorted(Comparator.comparing(Books::getPrice).reversed()).collect(Collectors.toList());
sortBooks2.forEach(book-> System.out.printf("书名:%s,价格:%s\n",book.getName(),book.getPrice()));

image.png

4.书本价格相加

 int totalPrice=books.stream().map(Books::getPrice).reduce(0,(a,b)->a+b);
System.out.println(totalPrice);

5.去重

 //使用distinct 方法去重
List<Integer> numbers = Arrays.asList(9, 10, 3, 4, 7, 3, 4);
List<Integer> distinct = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
System.out.printf("Original List : %s,  Square Without duplicates : %s %n", numbers, distinct);
image.png

替代内部类

  //替代内部类
    public void test2(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Before Java8, too much code for too little to do");
            }
        }).start();

        new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
    }

简单的用可以,如果链条太长的话,有时候会让代码反而更加难看懂

相关文章

  • Java 8 - Lambda表达式

    Java 8 - Lambda表达式 1 Java 8-概述2 Java 8 - Lambda表达式3 Java ...

  • 【Java】4.0 Java中lambda表达式(下)

    【Java】3.0 Java中lambda表达式(上)【Java】4.0 Java中lambda表达式(下) 7....

  • java 8 lambda表达式中的异常处理

    java 8 lambda表达式中的异常处理 简介 java 8中引入了lambda表达式,lambda表达式可以...

  • java8

    1.lambda表达式《java8 Lambda表达式简介》 《java8 lambda表达式,方法的引用以及构造...

  • 《Java 8实战》学习总结

    Java 8新特性概览 Lambda表达式 流 默认方法 Lambda表达式 Lambda和函数式接口Java 8...

  • Java零基础自学DAY10 2018-03-22

    Java 8 新增的lambda表达式 Lambda 转换: Lambda表达式组成: 形参列表 箭头 ( ->)...

  • Java 8、9 语言新特性

    Java语言新特性 Java8 Java 8 新特性 Lambda 表达式 Lambda表达式(也叫做闭包)是Ja...

  • Java的Lambda表达式

    Java的Lambda表达式 1. 什么是Lambda表达式 简单的说,Lambda表达式就是匿名方法。Lambd...

  • Lambda表达式

    Lambda表达式与函数式接口紧密相关,函数式接口介绍 Lambda表达式的基本语法 Java Lambda表达式...

  • 7 Lambda表达式

    Lambda表达式是Java8的重要更新,Lambda表达式支持将代码块作为方法参数,Lambda表达式允...

网友评论

      本文标题:Java --lambda 表达式

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