美文网首页
33、Lambda(一)

33、Lambda(一)

作者: 爱学习的代代 | 来源:发表于2021-05-17 09:19 被阅读0次

    lambda的表达式必须能够符合接口中定义的抽象方法,从参数、返回值,到异常都必须匹配。

    1. lambda完整版是 (参数) ----> {代码块},其中()和{} 在特定场合下也可以省略
    2. lambda可以由返回值,使用return语句即可,当然foreach接口没有,所有lambda表达式也不能有
    3. lambda可以使用外部数据,看着和匿名内部类是一样的
    4. lambda 不使用外部数据的话:
    • 静态方法可以使用类名::方法名
    • 实例方法可以使用实例变量::方法名
    package day19;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.function.Consumer;
    
    public class IterateListLambdaAppMain {
        public static void main(String[] args) {
            List<String> myList = addElementToList(new ArrayList<>());
    
            String outside = "outside string";
    
    //        for(String s: myList) {
    //            processString(outside + s);
    //        }
    
    //      匿名内部类实现循环:
    //        myList.forEach(new Consumer<String>() {
    //            @Override
    //            public void accept(String s) {
    //                processString(outside + s);
    //            }
    //        });
    
    //     lambda的表达式必须能够符合接口中定义的抽象方法,从参数、返回值,到异常都必须匹配。
    
    //     1. lambda完整版是  (参数) ----> {代码块}
    //     2. lambda可以由返回值,使用return语句就可以,当然我们接口没有,所有lambda表达式也不能有
    //     3. lambda可以使用外部数据,看着和匿名内部类是一样的
    
    
    //     使用lambda表达式实现list内容的打印
    
    //        myList.forEach((s) -> {processString(outside + s);});
    
    //      简化版,去掉参数的() 和 方法体的{}
    //
    //        myList.forEach(s -> processString(outside + s));
    //
    //
    ////      如果无外部变量可以使用类名::方法名的方式来实现
    //        myList.forEach(IterateListLambdaAppMain::processString);
    //
    ////      非静态方法,可以使用实例来调用
    //        IterateListLambdaAppMain inst = new IterateListLambdaAppMain();
    //        myList.forEach(inst::processStringInst);
    
    //        lambda允许一个指定参数类型里的一个方法作为方法的引用
    //        myList.forEach(String::toUpperCase);
    
    
    
    //      hashMap的用法
            Map<String, String> myMap = new HashMap<>();
            myMap.put("k1", "v1");
            myMap.put("k2", "v2");
            myMap.put("k3", "v3");
    
    //        myMap.forEach((k,v) -> processTwoStrings(k,v));
    //      或者这种写法
            myMap.forEach(IterateListLambdaAppMain::processTwoStrings);
    
    
    
        }
    
    
        public static List<String> addElementToList(List<String> list) {
            for(int i = 0; i < 10; i++) {
                list.add("str" + (i % 5));
            }
    
            return list;
        }
    
        private static void processString(String str) {
            System.out.println(str);
        }
    
        private static void processTwoStrings(String str1, String str2) {
            System.out.println("s1=" + str1 + ", s2=" + str2);
        }
    
        private void processStringInst(String str) {
            System.out.println(str);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:33、Lambda(一)

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