Lambda表达式

Lambda

在这里插入图片描述

  • 格式:(形式参数)->{代码块}
  • 形式参数:如果有多个参数,参数之间用逗号隔开;如果无参,留空即可
  • ->:中画线和大于符号组成,代表指向动作
  • 代码块:是我们具体要做的事情,也就是所写的方法体

抽象无参无返回值

public class EatableDemo {
    public static void main(String[] args) {
        //主方法中调用
        Eatable e = new EatableImpl();
        useEatable(e);

        //匿名内部类
        useEatable(new Eatable() {
            @Override
            public void eat() {
                System.out.println("吃苹果");
            }
        });
        //Lambda表达式
        useEatable(()->{
            System.out.println("吃苹果");
        });

    }
    private static void useEatable(Eatable e){
        e.eat();

    }
}
----------------
public class EatableImpl implements Eatable{
    @Override
    public void eat() {
        System.out.println("吃苹果");
    }
}
------------------
public interface Eatable {
    void eat();
}

省略规则

  • 参数类型可以省略。但是有多个参数的情况下,不能只省略一个。
  • 如果参数有且仅有一个,那么小括号可以省略
  • 如果代码块的语句只有一条,可以省略大括号和分号、return

在这里插入图片描述

Lambda表达式和匿名内部类的区别

在这里插入图片描述

接口默认方法

在这里插入图片描述

接口静态方法

在这里插入图片描述

接口私有方法

在这里插入图片描述
方法引用符:::

public class AbleDemo {
    public static void main(String[] args) {
        //Lambda表达式
        useAble(s -> System.out.println(s));

        //方法引用符
        useAble( System.out::println);
    }
    private static void useAble(Able s){
        s.abb("爱Java");
    }
}
----------------
public interface Able {
    void abb(String s);
}

引用对象的实例方法

在这里插入图片描述

public class PrinterDemo {
    public static void main(String[] args) {
        //主方法调用
        usePrinter(s -> System.out.println(s.toUpperCase()));
        //引用对象的实例方法
        PrintString ps = new PrintString();
        usePrinter(ps::printUpper);

    }
    private static void usePrinter(Printer p){
        p.printUpperCase("hello tom");
    }
}
--------------------
public interface Printer {
    void printUpperCase(String s);
}
---------------
public class PrintString {
    public void printUpper(String s){
        String result = s.toUpperCase();
        System.out.println(result);
    }
}

引用构造器

在这里插入图片描述

Consumer接口

public class ConsumerDemo {
    public static void main(String[] args) {
        String[] strArray={"林丹,35","虞姬,25","张飞,42"};
        printInfo(strArray,str ->{String name=str.split(",")[0]; System.out.print("姓名:"+name);}
        ,str ->{int age=Integer.parseInt(str.split(",")[1]); System.out.println(",年龄:"+age);});

    }


    private static void printInfo(String[] strArray, Consumer<String> con1,Consumer<String> con2){
        for (String str:strArray){
            con1.andThen(con2).accept(str);
        }
    }
}
---------------
姓名:林丹,年龄:35
姓名:虞姬,年龄:25
姓名:张飞,年龄:42

predicate接口

在这里插入图片描述

public class PredicateDemo {
    public static void main(String[] args) {
        String[] strArray={"林丹,35","虞姬,25","张大飞,42"};
        ArrayList<String> array=myFilter(strArray,s -> s.split(",")[0].length()>2,s -> Integer.parseInt(s.split(",")[1])>33);
        for (String str:array){
            System.out.println(str);
        }
    }
    private static ArrayList<String> myFilter (String[] strArray, Predicate<String> pre1,Predicate<String> pre2){
        ArrayList<String> array = new ArrayList<>();
        for (String str:strArray){
            if (pre1.and(pre2).test(str)){
                array.add(str);
            }
        }
        return array;
    }
}
-----------------
张大飞,42

Function接口

在这里插入图片描述

public class FunctionDemo {
    public static void main(String[] args) {
        String s="林丹,25";
        convert(s,s1 ->s1.split(",")[1],Integer::parseInt,i ->i+70);

    }
    private static void convert(String s, Function<String,String> fun1,Function<String,Integer> fun2,Function<Integer,Integer> fun3){
        int i=fun1.andThen(fun2).andThen(fun3).apply(s);
        System.out.println(i);
    }
}

Stream流

在这里插入图片描述

public class StreamDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("琳达");
        list.add("张大雷");
        list.add("王德发");
        list.add("张飞");
        list.stream().filter(s -> s.startsWith("张")).filter(s -> s.length()==3).forEach(System.out::println);
    }
}

** Stream流生成方式**
在这里插入图片描述

在这里插入图片描述
常见中间操作
在这里插入图片描述

常见终结操作

在这里插入图片描述
收集操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值