lambda表达式

1.什么是lambda表达式

lambda表达式是JAVA8中提供的一种新的特性,它支持JAVA也能进行简单的“函数式编程”。
它是一个匿名函数,即用即扔。

2.函数式接口(一个只有一个抽象方法(不包含object中的方法)的接口。)

//这个是函数式接口
interface eat 
{  
   void eatFood();    
}
 
 
//这个不是是函数式接口
interface eat
{  
  default void eatFood()
  {
     System.out.println("hello");
  };    
}
 
 
 
//这个是一个函数式接口
interface eat 
{  
 void eatFood();    
 String sleep();
}

 对于是否是函数式接口,java8中也提供了一个专用的注解:@FunctionalInterface。通过这个注解,可以确定是否是函数式接口:

//此处会报编译错误
@FunctionalInterface
interface eat 
{  
  default void eatFood()
  {
    System.out.println("eat.........");
  };    
}

3.Lambda表达式语法

左侧 : Lambda 表达式的参数列表
右侧 : Lambda 表达式中所需执行的功能

() -> System.out.println(“Hello Lambda!”);

4.作用

(1).替代匿名内部类

匿名内部类:


  public void run() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("old runable!");
            }
        }).start();
    }


//结果:old runable!

lambda表达式:


    public void run() {
        new Thread(() -> System.out.println("lambda function!")).start();
    }


//结果:lambda function!

 (2)对集合进行迭代


    public void iterTest() {
         List<String> stringLists = List.of("apple", "banana", "cherry", "date", "fig", "grape");
        //java8之前使用增强for循环
        for(String stringList:stringLists) {
            System.out.println(stringList );
        }
        //java8之后
        stringLists.forEach(stringList -> System.out.println(stringList));
        stringLists.forEach(System.out::println);
    }

(3)Stream操作(流操作)

Stream它像一个高级版本的 Iterator。原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作;高级版本的 Stream,用户只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大于 10 的字符串”、“获取每个字符串的首字母”等,Stream 会隐式地在内部进行遍历,做出相应的数据转换。
Stream就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了,就好比流水从面前流过,一去不复返。

1)filter(过滤)

list.stream()//将集合转换为流
                .filter(s -> s.length() > 3)//过滤长度大于3的字符串

2)Map(映射)
如果想通过某种操作把一个流中的元素转化成新的流中的元素,可以使用 map() 方法。

public class MapStreamDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("周杰伦");
        list.add("王力宏");
        list.add("陶喆");
        list.add("林俊杰");
        Stream<Integer> stream = list.stream().map(String::length);
        stream.forEach(System.out::println);
    }
}
//结果:
     3
     3
     2
     3

map() 方法接收的是一个 Function(Java 8 新增的一个函数式接口,接受一个输入参数 T,返回一个结果 R)类型的参数,此时参数 为 String 类的 length 方法,也就是把 Stream 的流转成一个 Stream 的流。

3)limit(截断)
对一个Stream进行截断操作,获取其前N个元素,如果原Stream中包含的元素个数小于N,那就获取其所有的元素

4)distinct(去重)
对于Stream中包含的元素进行去重操作(去重逻辑依赖元素的equals方法),新生成的Stream中没有重复的元素

5)count(统计)
count方法是一个流的终点方法,可使流的结果最终统计,返回int,比如我们计算一下满足18岁的总人数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值